题目描述
思路分析
字符串模拟题 / 双指针
双指针遍历每个字符串。先找到某一行的字符串容纳范围
[
i
,
j
]
[i,j]
[i,j],然后判断是左对齐还是双边对齐,然后分别模拟即可。
代码实现
class Solution {
public:
string f(int x){
string res;
for(int i=0;i<x;i++) res+=" ";
return res;
}
vector<string> fullJustify(vector<string>& words, int maxWidth) {
vector<string> res;
for(int i=0;i<words.size();i++){
int j=i+1;
int len=words[i].size();
while(j<words.size()&&len+1+words[j].size()<=maxWidth)
len+=1+words[j++].size();
string cur;
if(j==words.size()||j==i+1){
cur+=words[i];
for(int k=i+1;k<j;k++) cur+=" "+words[k];
while(cur.size()<maxWidth) cur+=" ";
}
else{
int cnt=j-i-1,all_len=maxWidth-len+cnt;
cur+=words[i];
int k=0;
while(k<all_len%cnt) cur+=f(all_len/cnt+1)+words[i+k+1],k++;
while(k<cnt) cur+=f(all_len/cnt)+words[i+k+1],k++;
}
res.push_back(cur);
i=j-1;
}
return res;
}
};