本文共 3447 字,大约阅读时间需要 11 分钟。
class Solution {//simplify the problempublic: vectorfullJustify(vector &words, int L) { // Start typing your C/C++ solution below // DO NOT write int main() function vector ret; int begin = 0, len = 0, n = words.size(); for (int i = 0; i < n; ++i) { if (len + words[i].size() + (i - begin) > L) { ret.push_back(connect(words, begin, i - 1, len, L, false));//push back one line begin = i; len = 0; } len += words[i].size(); } ret.push_back(connect(words, begin, n - 1, len, L, true)); return ret; } string connect(vector &words, int begin, int end, int len, int L, bool leftJustify) { string s; int n = end - begin + 1; for (int i = 0; i < n; ++i) { s += words[begin + i]; addSpaces(s, i, n - 1, L - len, leftJustify); } if (s.size() < L) s.append(L - s.size(), ' '); return s; } void addSpaces(string &s, int i, int n, int L, bool leftJustify) { if (n < 1 || i > n - 1) return; int spaces = leftJustify ? 1 : (L / n + (i < (L % n) ? 1 : 0)); s.append(spaces, ' '); }};
second time
class Solution {public: string leftJustified(int L, vector& words, int start, int end) { string ans; for(int i = start; i < end; ++i) { ans = ans+words[i]; ans.push_back(' '); } ans = ans+words[end]; int curCnt = 0; for(int i = start; i <= end; ++i) curCnt += words[i].size(); curCnt += (end-start); int lastCnt = L-curCnt; ans.append(lastCnt, ' '); return ans; } string evenJustified(int L, vector & words, int start, int end) { int curCnt = 0; for(int i = start; i <= end; ++i) curCnt += words[i].size(); curCnt += (end-start); int leftCnt = L-curCnt; string ans; if(end-start >= 1) { int addCnt = leftCnt/(end-start); int extraCnt = leftCnt%(end-start); for(int i = start, j = 1; i < end; ++i, ++j) { int spaceCnt = 1+addCnt; if(j <= extraCnt) spaceCnt++; ans = ans+words[i]; ans.append(spaceCnt, ' '); } ans = ans+words[end]; } else { ans = ans+words[end]; ans.append(L-words[end].size(), ' '); } return ans; } vector fullJustify(vector &words, int L) { // Start typing your C/C++ solution below // DO NOT write int main() function if(words.size() == 0 || L == 0) return words; int start = 0; vector ans; while(start < words.size()) { int curWordLen = 0; int curWordCnt = 0; int i; for(i = start; i < words.size(); ++i) { curWordLen += words[i].size(); curWordCnt++; if(curWordLen+curWordCnt-1 > L) { i--; break; } } if(i == words.size()) { i--; string tmp = leftJustified(L, words, start, i); ans.push_back(tmp); } else { string tmp = evenJustified(L, words, start, i); ans.push_back(tmp); } start = i+1; } return ans; }};
转载地址:http://yhxti.baihongyu.com/