面试150 文本左右对齐
思路
按顺序将单词逐个加入当前行,维护当前行的单词总长度和单词列表,当加入一个新单词会导致当前行超出设定宽度maxWidth时,开始对这一行进行两端对齐处理。具体做法是将所需的空格均匀分配在相邻单词之间,若无法平均分配,则从左至右多分配一个空格,直到补满整行。处理完当前行后清空,开始新一行。所有单词处理完后,最后一行采用左对齐方式,用空格补齐到maxWidth。该算法保证了每一行长度一致,并尽可能使文本左右对齐。
class Solution:def fullJustify(self, words: List[str], maxWidth: int) -> List[str]:res=[] #结果列表cur=[]#存当前行的单词num_of_letters=0 #当前行不包括空格的长度for word in words:#对于每个单词word,判断如果把它加到当前行,会不会超过maxWidthif num_of_letters+len(word)+len(cur)>maxWidth:#计算需要的空格数for i in range(maxWidth-num_of_letters):cur[i%(len(cur)-1 or 1)]+=' 'res.append(''.join(cur))cur=[]num_of_letters=0cur.append(word)num_of_letters+=len(word)res.append(' '.join(cur).ljust(maxWidth))#最后一行左对齐,ljust是内置函数return res