题解 | #将单词均匀排列#

将单词均匀排列

https://www.nowcoder.com/practice/47cb397f179a46e1ac0f2e388e1f844a

  • 题目考察的知识点 : 字符串
  • 题目解答方法的文字分析:
  1. 模拟字符串排版的过程。首先,遍历每一行,选取尽可能多的单词放入该行。然后计算在该行中需要添加的空格数,并根据题目要求平均分配空格或者使左侧的空格数多于右侧的空格数。最后将每一行的单词拼接成字符串形式,并添加到结果列表中。
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param words string字符串一维数组
# @param maxWidth int整型
# @return string字符串一维数组
#
class Solution:
    def arrangeWords(self, words: List[str], maxWidth: int) -> List[str]:
        result = []  # 存储排版后的结果
        i = 0
        while i < len(words):
            j = i
            curWidth = 0
            # 尽可能多地添加单词到当前行中
            while j < len(words) and (curWidth + len(words[j]) + j - i) <= maxWidth:
                curWidth += len(words[j])
                j += 1
            space = maxWidth - curWidth  # 计算需要添加的空格数量
            line = words[i]  # 当前行的第一个单词
            if j < len(words):  # 如果不是最后一行
                for k in range(i+1, j):  # 遍历当前行中的其他单词
                    # 计算当前单词前面需要添加的空格数量,并添加到字符串中
                    numSpaces = 1 if j - k == 1 or j == len(words) else (space + j - k - 2) // (j - k - 1)
                    line += " " * numSpaces
                    space -= (numSpaces - 1)  # 更新剩余的空格数量
                    line += words[k]
                if len(line) < maxWidth:
                    line += " " * (maxWidth - len(line))  # 左对齐并添加额外的空格
            else:  # 如果是最后一行,则左对齐并添加额外的空格
                for k in range(i+1, j):
                    line += " "
                    line += words[k]
                if len(line) < maxWidth:
                    line += " " * (maxWidth - len(line))
            result.append(line)  # 添加当前行到结果列表
            i = j  # 更新下一行的起始位置
        return result
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务