Given an array of Words and a length L, format the text such that each line has exactlyL characters and is fully (left and right) justified.
You should pack your words in a greedy apPRoach; that is, pack as many words as you can in each line. Pad extra spaces' '
when necessary so that each line has exactly L characters.
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a line do not divide evenly between words, the empty slots on the left will be assigned more spaces than the slots on the right.
For the last line of text, it should be left justified and no extra space is inserted between words.
For example,words: ["This", "is", "an", "example", "of", "text", "justification."]
L: 16
.
Return the formatted lines as:
[ "This is an", "example of text", "justification. "]Note: Each word is guaranteed not to exceed L in length.
給出一個字符串數組,要求變換成另一個字符串數組,要求是組成的每個字符串的長度為maxWidth(用貪心算法),原字符間要用空格隔開,不夠長的話在字符間填充空格,規則是間隔要盡量均勻,如果間隔的空格數不能完全相等,靠左邊的要分多點。最后一行和前面的規則不一樣,最后一行間隔為1個空格,剩余的空格都填充在后面。實現時就是遍歷累加字符長度,適當長時就按上面的規則,計算出各間隔空格數,組合成字符串,加到答案中,同時也令累加長度為0重新累加。
代碼:
class Solution{public: vector<string> fullJustify(vector<string>& words, int maxWidth) { vector<string> res; if(words.empty()) return res; int n = words.size(), p = 0, len = 0, i = 0; words.push_back(" "); for(i; i <= n; ++i) { if(len + words[i].size() + i - p > maxWidth || i == n) { int r = maxWidth - len, space, addition, d = 1; if(i == n) { space = 1; addition = 0; } else if(i - p - 1 <= 0) { space = r; addition = 0; } else { space = r / (i - p - 1); addition = r % (i - p - 1); } string tmp; for(p; p < i; ++p) { tmp += words[p]; if(p == i - 1) continue; if(addition-- <= 0) d = 0; tmp += string(space + d, ' '); } while(tmp.size() < maxWidth) tmp += " "; res.push_back(tmp); len = 0; } len += words[i].size(); } return res; }};
新聞熱點
疑難解答