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

最后更新于