假设我们有一个字符串S,并且必须从左到右将给定字符串的字母写成几行。在这里,每行的最大宽度为100个单位,如果写一个字母会导致该行的宽度超过100个单位,则会在下一行上写该宽度。我们还有一个数组宽度,这里的widths [0]是'a'的宽度,widths [1]是'b'的宽度,依此类推。
我们必须找到两个问题的答案-
多少行中至少有一个字符来自S
最后一条这样的线使用的宽度是多少?
我们将以长度为2的整数列表返回答案。
因此,如果输入像[4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 10,10,10,10,10]且S =“ bbbcccdddaaa”,则输出将为[2,4],因为除'a'以外的所有字母都具有相同的10,并且字符串“ bbbcccdddaa”将覆盖9 * 10 + 2 * 4 = 98个空格。对于最后一个“ a”,它写在第二行上,因为第一行只剩下2个单位。所以答案是2行,第二行再加上4个单位。
为了解决这个问题,我们将遵循以下步骤-
行:= 1,计数:= 0
对于S中的每个i,
行:=行+ 1
count:= widths [i的ASCII-97]
count:= count + widths [i的ASCII-97]
如果计数> 100,则
返回[行数]
让我们看下面的实现以更好地理解-
class Solution: def numberOfLines(self, widths, S): line = 1 count = 0 for i in S: count += widths[ord(str(i))-97] if count > 100: line += 1 count = widths[ord(str(i))-97] return [line, count] ob = Solution()print(ob.numberOfLines([4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10], "bbbcccdddaaa"))
[4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],"bbbcccdddaaa"
输出结果
[2, 4]