[leetcode_68]Text Justification

好激动!!!leetcode终于全部AC一次了,虽然经历过波折,还是很兴奋啊!!!
大模拟,就是将字符串按规定句式输出。leetcode的好处就是很看到测试数据,好好理解题意,慢慢调试吧,一次AC其实应该蛮难的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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;
    }
};
Licensed under CC BY-NC-SA 4.0