代码改变世界

leetcode - Text Justification

2013-12-09 16:04  张汉生  阅读(207)  评论(0编辑  收藏  举报

 

 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 };