1. 非末行,均分单词间的空格,当无法均分时,靠左的单词间的空格多一格。
2. 末行,单词和单词间的空格数为1, 行末补上空格。
代码(写的难看,下次改进了):
class Solution
{
public:
vector<string> fullJustify(vector<string> &words, int L)
{
vector<string> ret;
for (size_t i = 0; i < words.size(); )
{
size_t begin=i, length=words[i].size();
for (++ i; i < words.size(); )
{
if (length+1+words[i].size() <= L)
{
length = length + 1 + words[i].size();
++ i;
} else
{
break;
}
}
int words_cnt = i - begin;
length = L;
for (int j = begin; j < i; ++ j)
{
length -= words[j].size();
}
if (i - begin == 1)
{
ret.push_back(words[begin] + string(L-words[begin].size(), ' '));
} else if (i == words.size())
{
string line;
for (int j = begin; j < i; ++ j)
{
line += words[j];
line += " ";
}
line += string(L-line.size(), ' ');
ret.push_back(line);
} else
{
int every = length / (i-begin-1);
int extra = length % (i-begin-1);
string line;
for (int j = begin; j < i; ++ j)
{
line += words[j];
if (j != i-1)
{
if (j-begin < extra)
{
line += string(every+1, ' ');
} else
{
line += string(every, ' ');
}
}
}
ret.push_back(line);
}
}
return ret;
}
};