806. 写字符串需要的行数 python

'''
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,..., widths[25] 代表 'z' 需要的单位。
现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。
示例 1:
输入:
widths = [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 = "abcdefghijklmnopqrstuvwxyz"
输出: [3, 60]
解释:
所有的字符拥有相同的占用单位10。所以书写所有的26个字母,
我们需要2个整行和占用60个单位的一行。
示例 2:
输入:
widths = [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个单位宽度。
'''
class Solution:
    def numberOfLines(self, widths, S):
        """
        :type widths: List[int]
        :type S: str
        :rtype: List[int]
        """
        # 已知 每一行的最大宽度为100个单位 求 行数 和 最后一行的单位
        # 当 宽 >=100 时 行数 +1 所以
        # 已知 数组 widths ,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,...,
        # widths[25] 代表 'z' 需要的单位,得到字典dict(zip(st,widths))
        st= "abcdefghijklmnopqrstuvwxyz"
        li = 1
        alli = 0
        wi = dict(zip(st,widths))
        for i in S:
            alli = alli + wi.get(i)
            if alli == 100:#当字符刚好占满一行时 行数加一 并且下一行从0开如计算
                li+=1
                alli=0
            elif alli > 100:#当字符占满超过一行时 行数加一 并且下一行从当前字符单位wi.get(i)开如计算
                li+=1
                alli = wi.get(i)
        return li,alli

    def numberOfLines1(self, widths, S):#最快的算法
        lnum = 1
        lwidth = 0
        ord_a = ord('a')# ord('a')=97   ord('b')=98  wisths[0]=ord('a')-ord('a')  wisths[1]=ord('b')-ord('a')
        for ch in S:
            width = widths[ord(ch)-ord_a]
            lwidth += width
            if lwidth > 100:
                lnum += 1
                lwidth = width
        return [lnum, lwidth]

print(Solution().numberOfLines(widths = [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"))
print(Solution().numberOfLines1(widths = [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"))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果要统计字符串中的行数,可以使用`splitlines()`方法将字符串按行分割成多个子字符串,然后使用`len()`函数获取子字符串的数量即可。 以下是一个示例代码,用于统计字符串`str`中的行数: ``` str = "hello\nworld\npython" num_lines = len(str.splitlines()) print("The number of lines in the string is:", num_lines) ``` 在这个代码中,首先定义一个字符串`str`,其中包含三行文本,每行文本之间使用`\n`进行换行。然后,使用`splitlines()`方法将字符串按行分割成多个子字符串,并将其存储为一个列表。最后,使用`len()`函数获取列表的长度,并将结果赋值给变量`num_lines`。最后,使用`print()`函数输出字符串行数需要注意的是,`splitlines()`方法会根据不同的操作系统(例如Windows和Linux)中的换行符自动进行分割,因此可以适用于不同操作系统下的字符串。如果字符串中的换行符不是`\n`,则需要先将其替换为`\n`,再使用`splitlines()`方法进行分割。例如: ``` str = "hello\r\nworld\r\npython" str = str.replace("\r\n", "\n") num_lines = len(str.splitlines()) print("The number of lines in the string is:", num_lines) ``` 在这个代码中,首先定义一个字符串`str`,其中包含三行文本,每行文本之间使用`\r\n`进行换行。然后,使用`replace()`方法将`\r\n`替换为`\n`,以便使用`splitlines()`方法进行分割。最后,使用`len()`函数获取列表的长度,并将结果赋值给变量`num_lines`。最后,使用`print()`函数输出字符串行数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值