Python中写入字符串的行数


假设我们有一个字符串S,我们需要将给定字符串的字母从左到右写入多行。每行的最大宽度为100个单位,如果写入一个字母会导致该行的宽度超过100个单位,则该字母将写入下一行。我们还有一个数组widths,其中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]和S = "bbbcccdddaaa",则输出将为[2, 4],因为除了'a'之外的所有字母都具有相同的长度10,并且字符串"bbbcccdddaa"将占用9 * 10 + 2 * 4 = 98个空间。对于最后一个'a',因为它在第一行只剩下2个单位空间,所以它被写入第二行。所以答案是2行,第二行占用4个单位。

为了解决这个问题,我们将遵循以下步骤:

  • line := 1, count := 0
  • 对于S中的每个i,执行:
    • count := count + widths[i的ASCII码 - 97]
    • 如果 count > 100,则
      • line := line + 1
      • count := widths[i的ASCII码 - 97]
  • 返回 [line, count]

让我们来看下面的实现,以便更好地理解:

示例

在线演示

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]

更新于:2020年7月4日

402 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.