1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| string blank(int n){ return string(n,' '); }
string join(vector<string>&words,int left,int right,string sep){ string s=words[left]; for(int i=left+1;i<right;i++){ s+=sep+words[i]; } return s; }
vector<string> fullJustify(vector<string>& words, int maxWidth) { vector<string>ans; int right=0; int n =words.size(); while(1){ int left =right; int sumLen =0; while(right<n && sumLen+words[right].length()+right-left<=maxWidth){ sumLen+=words[right].length(); right++; }
if(right==n){ string s= join(words,left,n," "); ans.emplace_back(s+blank(maxWidth-s.length())); return ans; }
int numWords = right-left; int numSpaces = maxWidth-sumLen;
if(numWords==1){ ans.emplace_back(words[left]+blank(numSpaces)); continue; }
int aveSpace = numSpaces/(numWords-1); int extraSpace = numSpaces%(numWords-1); string s1 =join(words,left,left+extraSpace+1,blank(aveSpace+1)); string s2 = join(words,left+extraSpace+1,right,blank(aveSpace)); ans.emplace_back(s1+blank(aveSpace)+s2);
} return ans; }
|