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

806. 写字符串需要的行数 - 力扣(LeetCode)

我们可以使用贪心算法来解决这个问题。具体步骤如下:

  1. 维护两个变量:

    • lines:用于记录总共使用了多少行,初始化为 1。

    • width:用于记录当前行的已使用宽度,初始化为 0。

  2. 遍历字符串 S 中的每个字符:

    • 获取该字符所需的宽度 w = widths[ord(c) - ord('a')]

    • 判断 width + w 是否超过 100:

      • 若未超过,则累加 wwidth

      • 若超过,则 lines 增加 1,width 重新赋值为 w(新行开始)。

  3. 最后,返回 [lines, width],其中 lines 代表总行数,width 代表最后一行的宽度。

代码实现:

def numberOfLines(widths, S):
    lines = 1
    width = 0

    for c in S:
        w = widths[ord(c) - ord('a')]
        if width + w > 100:
            lines += 1
            width = w
        else:
            width += w

    return [lines, width]

复杂度分析:

  • 遍历 S 一遍,时间复杂度为 O(N)(其中 NS 的长度)。

  • 仅使用了几个额外变量,空间复杂度为 O(1)

这个方法高效地计算了所需的行数和最后一行的宽度。🚀

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值