1 class Solution {
2 public:
3 vector<string> fullJustify(vector<string> &words, int L) {
4 // IMPORTANT: Please reset any member data you declared, as
5 // the same Solution instance will be reused for each test case.
6 int n = words.size();
7 int i =0;
8 vector<vector<string> > rlts;
9 vector<int> lens;
10 while (i<n){
11 vector<string> vs;
12 vs.push_back(words[i]);
13 int curLen = words[i].length();
14 i++;
15 while (i<n){
16 int tryLen = curLen + words[i].length() + 1;
17 if ( tryLen <= L ){
18 vs.push_back(words[i]);
19 curLen = tryLen;
20 i++;
21 }
22 else break;
23 }
24 lens.push_back(curLen);
25 rlts.push_back(vs);
26 }
27 vector<string> rlt;
28 int size = rlts.size();
29 for (i=0; i<size-1; i++){
30 vector<string> & vs = rlts[i];
31 int num = vs.size();
32 string str = "";
33 if (num==1){
34 str = vs[0];
35 for (int j=lens[i]; j<L; j++)
36 str += " ";
37 }
38 else {
39 int moreBlanks = L-lens[i];
40 int allAdd = moreBlanks / (num-1);
41 int offset = moreBlanks % (num-1);
42 for (int k=0; k<num; k++){
43 int numBlacks = 1+allAdd;
44 if (k==num-1)
45 numBlacks=0;
46 else if (k<=offset-1)
47 numBlacks++;
48 str += vs[k];
49 for (int j=0; j<numBlacks; j++)
50 str+= ' ';
51 }
52 }
53 lens[i] = L;
54 rlt.push_back(str);
55 }
56 if (size>0){
57 string str="";
58 for (int j=0; j<rlts[size-1].size(); j++){
59 str += rlts[size-1][j];
60 if (j<rlts[size-1].size()-1)
61 str += ' ';
62 }
63 for (int j=lens[size-1]; j<L; j++)
64 str += ' ';
65 rlt.push_back(str);
66 }
67 return rlt;
68 }
69 };