Problem Description:http://oj.leetcode.com/problems/text-justification/
Note: Just be careful about boundary when implementing it.
1 class Solution { 2 public: 3 string genNormalLine(vector<string> &words, int L, int start, int end){ 4 int word_count = end - start + 1; 5 string line; 6 if(word_count == 1){ 7 line.append(words[start]); 8 line.append(L-line.size(), ' '); 9 }else{ 10 int slot_num = word_count - 1; 11 int words_size = 0; 12 for(int i = start; i <= end; i++) 13 words_size += words[i].size(); 14 15 int space_num = L - words_size; 16 int reminder = space_num % slot_num; 17 int quotient = space_num / slot_num; 18 line.append(words[start]); 19 for(int i = start + 1; i <= end; i++) { 20 if(reminder > 0 ){ 21 line.append(quotient + 1, ' '); 22 reminder --; 23 } else { 24 line.append(quotient, ' '); 25 } 26 27 line.append(words[i]); 28 } 29 } 30 31 return line; 32 } 33 34 vector<string> fullJustify(vector<string> &words, int L) { 35 // Note: The Solution object is instantiated only once and is reused by each test case. 36 vector<string> formatted_lines; 37 if(words.size() == 0) 38 return formatted_lines; 39 for(int i = 0; i < words.size();){ 40 int length = 0; 41 42 int j = i; 43 for(; j < words.size(); j ++){ 44 if( j == i) 45 length += words[j].size(); 46 else 47 length += (1+ words[j].size()); 48 49 if(length > L) 50 break; 51 } 52 53 //put words in a line 54 if(j == words.size()) { 55 //last line 56 string line; 57 line.append(words[i]); 58 for(int k = i + 1; k < words.size(); k++){ 59 line.push_back(' '); 60 line.append(words[k]); 61 } 62 if(line.size() < L){ 63 line.append(L-line.size(), ' '); 64 } 65 66 formatted_lines.push_back(line); 67 }else { 68 //normal line 69 formatted_lines.push_back(genNormalLine(words,L, i, j - 1)); 70 } 71 72 //next start index 73 i = j; 74 } 75 76 return formatted_lines; 77 } 78 };