当前位置: 首页 > 后端技术 > Python

leetcode68.文本左右对齐-python

时间:2023-03-26 12:58:15 Python

https://leetcode-cn.com/probl...解题思路中有如下变量:ans最终答案cur_c中的字母个数当前行cur_w当前行的词数wl逐字传递当前行的词表,判断加入这个词是否会超过最大长度。一行的最小长度为:cur_c+cur_w-1如果这大于maxWidth,则将此行添加到ans.所有单词都通过后,将剩余的单词放在最后一行。再看每一行的单词怎么排:如果这一行只有一个单词,单词最对齐,空格补满。一行中多个单词的空格可以平均分配,求每行之间的平均空格,直接使用python字符串的join方法有多余的空格。这个问题左边比右边需要更多的空间。先计算每个区间的平均空格数,再计算剩余的空格数。如果平均值为b,其余x为,则前x个区间为空b+1,后一个均为空b。代码类解决方案:deffullJustify(self,words:List[str],maxWidth:int)->List[str]:ans=[]#最终答案cur_c=0#当前行中的字母数cur_w=0#当前行单词个数wl=[]#当前行的单词列表fori,wdinenumerate(words):l=len(wd)ifcur_c+l+cur_w>maxWidth:#添加这个单词会超过最大长度ifcur_w==1:#当前行只有一个超长单词,后面全部加空格ans.append(wl[0]+''*(maxWidth-cur_c))else:left=maxWidth-cur_c#这一行有多少空格ifleft%(cur_w-1)==0:#空格均匀分布ans.append((''*(left//(cur_w-1))).join(wl))else:#SpacescannotbeaveragedAssignx=left%(cur_w-1)#extraspaceb=left//(cur_w-1)#averageminimumnumberofspacesperintervalcans=wl[0]foriinrange(x):#frontxspaceb+1罐+=''*(b+1)+wl[i+1]foriinrange(x+1,len(wl)):#下面是空的bcans+=''*b+wl[i]ans.append(cans)cur_c=lcur_w=1wl=[wd]else:cur_c+=lcur_w+=1wl.append(wd)ifcur_w>0:#所有单词结束后,把剩下的单词放到最后一行cans=''.join(wl)cans+=''*(maxWidth-len(cans))ans.append(cans)returnans欢迎来到我的博客:https://codeplot.top/我的博客分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/