首页 » 编程之美 » 正文

[leetcode_68]Text Justification

好激动!!!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;
    }
};

发表评论