68. 文本左右对齐
https://leetcode-cn.com/problems/text-justification/
解法一:
用一个cur记录一行的输出,用num_of_letters记录字符数。遍历每个单词,若总单词长度加上单词间空格已经超过maxWidth,就输出,否则cur继续填充
精髓在于如何保证左侧放置的空格数要多于右侧的空格数,见下面代码,先计算所需括号数,然后对cur中的0~len(cur)-1号元素逐一进行填充来保证。
for i in range(maxWidth - num_of_letters):
cur[i%(len(cur)-1 or 1)] += ' '
最后一行用py的ljust()方法来左对齐。
class Solution:
def fullJustify(self, words: List[str], maxWidth: int) -> List[str]:
res, cur, num_of_letters = [], [], 0
for w in words:
#检查:当前字符数+空格数+新的单词长度
if num_of_letters + len(cur) + len(w) > maxWidth:
#填充括号
for i in range(maxWidth - num_of_letters):
cur[i%(len(cur)-1 or 1)] += ' '
res.append(''.join(cur))
cur = []
num_of_letters = 0
cur += [w]
num_of_letters += len(w)
res += [' '.join(cur).ljust(maxWidth)] #最后一行
return res
最后更新于