美文网首页
python实现leetcode之68. 文本左右对齐

python实现leetcode之68. 文本左右对齐

作者: 深圳都这么冷 | 来源:发表于2021-09-07 12:46 被阅读0次

解题思路

处理每一个单词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

效果图

相关文章

网友评论

      本文标题:python实现leetcode之68. 文本左右对齐

      本文链接:https://www.haomeiwen.com/subject/wcyjwltx.html