美文网首页
68. Text Justification

68. Text Justification

作者: jecyhw | 来源:发表于2019-05-31 10:34 被阅读0次

题目链接

https://leetcode.com/problems/text-justification/

解题思路

模拟题

代码

class Solution {
public:
    vector<string> fullJustify(vector<string>& words, int maxWidth) {
        vector<string> ans;
        int s = 0, e = -1, len = 0;
        for (int i = 0; i < words.size();) {
            int t = len + words[i].length() + 1;
            if (t > maxWidth + 1) {
                ans.push_back(getS(words, s, i, maxWidth));
                len = 0;
                s = i;
            } else {
                len = t;
                ++i;
            }

        }
        ans.push_back(getS(words, s, words.size(), maxWidth));
        return ans;
    }

    string getS(vector<string>& words, int s, int e, int maxWidth) {
        int space = e - s - 1;
        if (space == 0) {
            fillSpace(words[s], maxWidth - words[s].length());
            return words[s];
        }
        string ans;
        //最后一个
        if (e == words.size()) {
            for (int i = s; i < e; ++i) {
                if (i != s) {
                    ans += " ";
                }
                ans += words[i];
            }
            fillSpace(ans, maxWidth - ans.length());
        } else {
            int len = 0;
            //计算字符长度
            for (int i = s; i < e; ++i) {
                len += words[i].length();
            }
            //分配空格
            int left = maxWidth - len;
            int num = left / space, mod = left - num * space;

            for (int i = s; i < e; ++i) {
                if (i != s) {
                    fillSpace(ans, mod > 0 ? num + 1 : num);
                    mod--;
                }
                ans += words[i];
            }
        }
        return ans;
    }

    void fillSpace(string &s, int n) {
        for (int i = 0; i < n; ++i) {
            s += " ";
        }
    }
};

相关文章

网友评论

      本文标题:68. Text Justification

      本文链接:https://www.haomeiwen.com/subject/zhfwtctx.html