# 68. 文本左右对齐

words = ["This", "is", "an", "example", "of", "text", "justification."]
maxWidth = 16

[
"This    is    an",
"example  of text",
"justification.  "
]

words = ["What","must","be","acknowledgment","shall","be"]
maxWidth = 16

[
"What   must   be",
"acknowledgment  ",
"shall be        "
]

因为最后一行应为左对齐，而不是左右两端对齐。

words = ["Science","is","what","we","understand","well","enough","to","explain",
"to","a","computer.","Art","is","everything","else","we","do"]
maxWidth = 20

[
"Science  is  what we",
"understand      well",
"enough to explain to",
"a  computer.  Art is",
"everything  else  we",
"do                  "
]

class Solution:
def fullJustify(self, words: List[str], maxWidth: int) -> List[str]:
res=[]
i=0
while i < len(words):
ii=i
l=len(words[i])
j=1#这一行的单词个数
while i<len(words)-1 and l<=maxWidth:#贪心找最多,以相邻单词间隔1空格为标准
i+=1
j+=1
l=l+1+len(words[i])
d=maxWidth-l
if d<0:#超过maxWidth减去最后一个单词
i-=1
j-=1
l=l-len(words[i+1])-1
d=maxWidth-l
if j==1:
w=words[ii]+' '*(maxWidth-len(words[ii]))
elif i==len(words)-1:#最后一行为左对齐
w=''
for k in range(ii,ii+j):
if k<ii+j-1:
w+=words[k]+' '
else:
w+=words[k]
w+=' '*(maxWidth-len(w))
else:
if d>0:#除相邻单词间隔1空格外还有剩余空格
if d%(j-1)==0:#剩余空格可均分
dd=d//(j-1)
w=''
for k in range(ii,ii+j):
if k<ii+j-1:
w+=words[k]+' '*(dd+1)
else:
w+=words[k]
else:#剩余空格不可均分
dd=d//(j-1)
ddd=d%(j-1)
w=''
for k in range(ii,ii+j):
if k<ii+ddd:
w+=words[k]+' '*(dd+2)#均分后多余的往前面加
elif k<ii+j-1:
w+=words[k]+' '*(dd+1)
else:
w+=words[k]
else:#相邻单词刚好间隔1空格
w=''
for k in range(ii,ii+j):
if k<ii+j-1:
w+=words[k]+' '
else:
w+=words[k]
res.append(w)
i+=1
return res


posted @ 2021-09-10 00:18  XXXSANS  阅读(145)  评论(0编辑  收藏  举报