LeetCode "Text Justification"

Just take care of corner cases!

class Solution {
public:
    vector<string> fullJustify(vector<string> &words, int L) {
        vector<string> ret;

        int startInx = 0;
        while (startInx < words.size())
        {
            //    Get word count a line
            int wcnt = 0, spcnt = 0;
            int i = 0;
            bool lastRm = false;
            for (i = startInx; i < words.size(); i++)
            {
                wcnt += words[i].length();
                spcnt = i - startInx + wcnt;
                if (spcnt >= L)
                {
                    lastRm = spcnt > L;
                    break;
                }
            }

            if (!lastRm) // good luck
            {
                string line;
                for (int j = startInx; j <= i && j < words.size(); j++)
                {
                    line += words[j];
                    if (j < i) line += ' ';
                }
                if (line.length() < L)    // should only happen to last word
                {
                    line.append(L - line.length(), ' ');
                }
                ret.push_back(line);
            }
            else    // needs to chop last one
            {
                //    Handle spaces
                spcnt -= words[i].length() + 1;
                int slotCnt = i - startInx - 1;
                int sp2fill = L - spcnt + slotCnt;
                vector<string> sp; 
                if (slotCnt == 0) slotCnt = 1;
                sp.resize(slotCnt);
                for (int k = 0; k < sp2fill; k++)
                {
                    sp[k % slotCnt] += ' ';
                }
                //    Compose
                string line;
                for (int j = startInx; j < i; j++)
                {
                    line += words[j];
                    if (j < i - 1 || (i - startInx) == 1)
                    {
                        line += sp[j - startInx];
                    }
                }
                ret.push_back(line);
            }

            startInx = lastRm ? i : i + 1;
        }

        return ret;
    }
};
原文地址:https://www.cnblogs.com/tonix/p/3909243.html