fullJustify
来源:互联网 发布:方舟生存进化优化mod 编辑:程序博客网 时间:2024/06/07 23:53
vector<string> fullJustify(vector<string> &words, int L)
{
vector<string> result;
if(words.empty() || L < 0)
return result;
int i = 0, begin = 0, end = 0;
int length = 0;
string formatString;
while(i < words.size())
{
length = 0;
begin = i;
while(i < words.size() && length + words[i].size() <= L)
{
length += words[i].size();
//if(i > begin)
length += 1; // at least one space;
++i;
}
if(begin == i)//words[i].size() >= L
{
result.clear();
break;
}
end = i - 1;
int wordCount = end - begin + 1;
int needSpaceCount = wordCount - 1;// 3 word need 2 space
int remaindSpace = L - length + wordCount;
vector<int> space(needSpaceCount, 0);
if(needSpaceCount == 0)// only one word on one line
{
space.push_back(remaindSpace);
}
else
{
for(int i = 0; i < remaindSpace; ++i)
{
++space[i % needSpaceCount];
}
}
formatString.clear();
int num = 0;
for(int j = begin; j < i; ++j)
{
formatString.append(words[j]);
if(i == words.size() && formatString.size() < L)//last line
{
formatString.push_back(' ');
}
else
{
if(j == begin)
formatString.insert(formatString.end(), space[num++], ' ');
else if(j != i - 1)//not last && not first word;
formatString.insert(formatString.end(), space[num++], ' ');
}
}
if(i == words.size() && L - formatString.size() > 0)//last line, fill ' '
{
formatString.insert(formatString.end(), L - formatString.size(), ' ');
}
result.push_back(formatString);
}
return result;
}
0 0