zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    ES6 Set
    JavaScript 之 对象属性的特性 和defineProperty方法
    ES6 ... 展开&收集运算符
    ES6 箭头函数
    ES6 解构 destructuring
    canvas之事件交互效果isPointPath
    跨域及JSONP原理
    P03 显示隐藏
    最长公共子序列
    P02 CSS样式
  • 原文地址:https://www.cnblogs.com/tonix/p/3909243.html
Copyright © 2011-2022 走看看