LeetCode 68. 文本左右对齐
原题链接
简单
作者:
bruce
,
2021-01-02 15:37:00
,
所有人可见
,
阅读 281
// 没什么可说的,参考y总
class Solution {
public:
string space(int x)
{
string res;
while(x--) res+=' ';
return res;
}
vector<string> fullJustify(vector<string>& words, int maxWidth)
{
vector<string> res;
if(!words.size()) return res;
for(int i=0;i<words.size();)
{
int j = i+1, s = words[i].size(), rs = words[i].size();
while(j<words.size() && s+1+words[j].size()<=maxWidth)
{
s+=1+words[j].size();
rs += words[j].size();
j++;
}
rs = maxWidth - rs; // rs 表示空格数量
string line = words[i];
if(j==words.size()) // 如果是最后一行的情况
{
for(i++; i<j;i++) line +=' '+words[i];
while(line.size() < maxWidth) line+=' ';
}
else if(j==i+1) line+=space(rs); // 最后一个单词
else // 其他情况
{
int base = rs / (j-i-1);
int rem = rs % (j- i -1);
i++;
for(int k=0; i<j; i++,k++) line+=space(base + (k<rem)) + words[i];
}
i = j;
res.push_back(line);
}
return res;
}
};