题解 | #将单词均匀排列#
将单词均匀排列
https://www.nowcoder.com/practice/47cb397f179a46e1ac0f2e388e1f844a
- 题目考察的知识点 : 字符串
- 题目解答方法的文字分析:
- 模拟字符串排版的过程。首先,遍历每一行,选取尽可能多的单词放入该行。然后计算在该行中需要添加的空格数,并根据题目要求平均分配空格或者使左侧的空格数多于右侧的空格数。最后将每一行的单词拼接成字符串形式,并添加到结果列表中。
- 本题解析所用的编程语言: 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道真题和解析