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;
        }
    };
  • 相关阅读:
    启动WCF多个服务方法
    获取本机内存使用信息、DataTable占用内存空间
    分享到微博代码
    EXCEL拼接SQL
    动态调用webservice及WCF服务
    整洁架构
    端口与适配器架构
    清晰架构
    EBI架构 VS. MVC
    查看Oracle加锁情况及解锁方法
  • 原文地址:https://www.cnblogs.com/tonix/p/3909243.html
Copyright © 2011-2022 走看看