【LeetCode】806. 写字符串需要的行数

384 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题给widths列表,定义a~z字母的单位
    • s字符串都是由小写字母组成

二、思路分析:

我们拿到本题,看到题目内容懵圈十分钟,内心直呼我不会做GAMEOVER。冷静一会,面对困难我们还是要去解决的,不然今日更文就完成不了。

回到正题,再次仔细阅读题目和示例,恍然大悟,本题给到的两个参数widths和S的意思。

  • widths列表:是定义a~z的字母的pixel
  • s字符串:是需要求出所有字母的pixels

我们读懂题意,那么解答本题思路可以使用模拟方法去解答:

  • 首先对S字符串进行遍历,取出每一个字母的
  • 因为widths列表的位置index所代表的是a~z字母pixel,所以可以使用ascii码值来求出index
  • 定义变量res来存储字母pixel和
  • 当res大于100时,则line进行+1,res并被赋值为最近的widths[index]
  • 最后返回[line,res]列表

根据以上思路,我们可以使用Python代码实现:

class Solution(object):
    def numberOfLines(self, widths, s):
        """
        :type widths: List[int]
        :type s: str
        :rtype: List[int]
        """

        res ,line =0, 1

        for i in s:

            index = ord(i) - 97  
            res = res + widths[index]

            if res > 100:
                res = widths[index]
                line = line + 1

        return [line,res]

三、总结:

本题难点在于要理解题意,widths列表定义是a~z的单位。因此代码记录如下:

image.png

时间复杂度O(n),n代表S字符串长度。 空间复杂度O(1)

以上是本期内容,欢迎大佬们点赞评论,下期见~~