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