class Solution {
public:
vector<string> fullJustify(vector<string>& words, int maxWidth) {
int lastWordsIndex=-1,//上轮循环处理的最后一个word
wordsTotalNow = 0,//当前循环统计的words数量
charsTotalNow=0,//当前循环统计的char数量
curLastWordIndex=0,//当前循环处理最后一个words 的index
curWordIndex = 0,
emptyCharLen = 1,//每次填充空格数量
extraMaxIndex = 0;//需要额外空格分界的最大index
vector<string> ret;
string temp;
if(maxWidth<=0){
return ret;
}
while (curWordIndex<words.size())
{
if(charsTotalNow+words[curWordIndex].length()>maxWidth){
//调整emptyCharLen,计算额外空格数量及其分界,最后重新进入循环来填充新的空格数量
curLastWordIndex = curWordIndex-1;//标记当前循环最后一个word的位置
curWordIndex = lastWordsIndex;//令循环cursor回退至上次最后一个位置
if(wordsTotalNow>1){
extraMaxIndex = (maxWidth-charsTotalNow + wordsTotalNow*emptyCharLen)%(wordsTotalNow-1);//emptyCharLen+1(0~extraMaxIndex-1)和emptyCharLen分界停止于extraMaxIndex
emptyCharLen = (maxWidth-charsTotalNow + wordsTotalNow*emptyCharLen)/(wordsTotalNow-1);//计算额外空格数量和不同数量的分界word index
}else{
emptyCharLen = maxWidth-charsTotalNow+emptyCharLen;
extraMaxIndex = 0;
}
temp="";//重新开始构造字符串
charsTotalNow = wordsTotalNow = 0;
}else if(curWordIndex==words.size()-1){
//最后一个,重新按照 emptyCharLen = 1 计算
emptyCharLen = 1;
temp = "";
break;
}else if(charsTotalNow+words[curWordIndex].length()==maxWidth){
temp+=words[curWordIndex];
ret.push_back(temp);
temp = "";
lastWordsIndex = curWordIndex;
wordsTotalNow = charsTotalNow = curLastWordIndex = extraMaxIndex = 0;
emptyCharLen = 1;
}else{
wordsTotalNow++;
charsTotalNow += words[curWordIndex].length();
temp+=words[curWordIndex];
for (int i = 0; i < emptyCharLen; i++)
{
temp+=" ";
}
charsTotalNow+=emptyCharLen;
if(wordsTotalNow<=extraMaxIndex){
temp+=" ";
charsTotalNow+=1;
}
if(wordsTotalNow<=1 && (charsTotalNow==maxWidth)){
ret.push_back(temp);
temp = "";
lastWordsIndex = curWordIndex;
wordsTotalNow = charsTotalNow = curLastWordIndex = extraMaxIndex = 0;
emptyCharLen = 1;
}
}
curWordIndex++;
}
wordsTotalNow++;
curWordIndex = lastWordsIndex+1;
emptyCharLen = 1;
while (curWordIndex<words.size() || temp.length()<maxWidth)
{
if(curWordIndex<words.size()){
temp += words[curWordIndex];
if(temp.length()<maxWidth){
temp += " ";
}
curWordIndex++;
}else{
temp += " ";
}
}
if(temp.length()>0){
ret.push_back(temp);
}
return ret;
}
};