class Solution {
public:
vector<string> fullJustify(vector<string> &words, int l) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> res;
if (words.size() == 0 || l < 0) return res;
int begin = 0;
while (begin < words.size())
{
int idx = begin;
int curSize = 0;
while (idx < words.size())
{
int tempSize = curSize == 0 ? words[idx].size() : curSize + words[idx].size() + 1;
if (tempSize <= l)
curSize = tempSize;
else
break;
++idx;
}
int end = idx - 1;
int eachGapSpace = 0;
int remainSpace = l - curSize;
string line = "";
if (end - begin != 0 && end != words.size() - 1)
{
eachGapSpace = remainSpace / (end - begin);
remainSpace %= (end - begin);
}
else
{
eachGapSpace = 0;
}
for (int i = begin; i <= end; ++i)
{
if (i == begin)
line = words[i];
else
{
line += " ";
for (int j = 0; j < eachGapSpace; ++j)
line += " ";
if (remainSpace > 0 && end != words.size() - 1)
{
line += " ";
--remainSpace;
}
line += words[i];
}
}
while (remainSpace > 0)
{
line += " ";
--remainSpace;
}
res.push_back(line);
begin = end + 1;
}
return res;
}
};