好激动!!!leetcode终于全部AC一次了,虽然经历过波折,还是很兴奋啊!!!
大模拟,就是将字符串按规定句式输出。leetcode的好处就是很看到测试数据,好好理解题意,慢慢调试吧,一次AC其实应该蛮难的。
class Solution { public: vector<string> fullJustify(vector<string> &words, int L) { vector<vector<string>>result; result.clear(); vector<string>ans; ans.clear(); if(L == 0) { ans.push_back(""); return ans; } for(int i = 0;i < words.size();i++) { vector<string>item; item.clear(); int sum = 0; while(true) { if(item.size() > 0) sum += 1; if(sum >= L) { i--; break; } if(i >= words.size())break; item.push_back(words[i]); sum+=words[i].length(); if(sum > L) { item.pop_back(); i--; break; } i++; } result.push_back(item); } for(int i = 0;i < result.size();i++) { string item = ""; if(i != result.size()-1)item = genString(result[i],L); else item = genStringLast(result[i],L); ans.push_back(item); } return ans; } private: string genStringLast(vector<string>&item,int L) { int sum = 0; string str = ""; for(int i = 0;i < item.size();i++) { str += item[i]; sum += item[i].size(); if(i != item.size()-1) { str += " "; sum += 1; } } for(int i = 0;i < L - sum;i++) str += " "; return str; } string genString(vector<string>&item,int L) { int sum = 0; for(int i = 0;i < item.size();i++) sum += item[i].size(); string str = ""; if(item.size() == 1) { int countS = L - sum; str += item[0]; for(int j = 0;j < countS;j++) str += " "; return str; } int spaces; if(item.size() > 1)spaces = (L-sum) / (item.size()-1); else spaces = 0; int ex = L-sum-spaces*(item.size()-1); for(int i = 0;i < item.size();i++) { str += item[i]; int countS; if(i < ex) countS = 1+spaces; else countS = spaces; if(i != item.size()-1) for(int j = 0;j < countS;j++) str += " "; } return str; } };