解题思路
处理每一个单词word
单词加入一行时会占用1个空格和len(word)个字符,所以新单词加入后至少需要len(word)个空格
如果新单词加入后超过行限长,计算空格总数和每个空格的平均长度x,还有一个剩余长度y,加到下标比y小的每个单词的尾部
然后使用x个空格来join产生一行,然后将当前单词放入下一行。
在最后一行的尾部添加空格补齐
68. 文本左右对齐
代码
class Solution:
def fullJustify(self, words: List[str], maxWidth: int) -> List[str]:
rtv = []
line, line_chars = [], 0
for word in words:
if line_chars + len(word) + len(line) > maxWidth:
# 字符数 + 空格数 > 最大长度
spaces = maxWidth - line_chars
if len(line) == 1:
rtv.append(line[0] + ' '*(maxWidth-line_chars))
else:
x, y = divmod(spaces, len(line)-1)
rtv.append((' '*x).join([wd+' ' if idx < y else wd for idx, wd in enumerate(line)]))
line, line_chars = [word], len(word)
else:
line.append(word)
line_chars += len(word)
rtv.append(' '.join(line) + ' '*(maxWidth-line_chars-len(line)+1))
return rtv
![](https://img.haomeiwen.com/i4291429/4b8154f745e2e444.png)
网友评论