zoukankan      html  css  js  c++  java
  • [leetcode]Text Justification

    本来以为要错很多次的,结果在两次CE之后就AC了....感觉不科学....

    按照题目中的描述来贪心就好

    开始就给每个word中间插一个字符,看能插入多少...

    到超过L了,那么就把这些作为一行,然后不够L的部分再在中间补空格

    最后一行单独处理...

    class Solution {
    public:
        vector<string> fullJustify(vector<string> &words, int L) {
            int start = 0;
            int size = words.size();
            int len = words[0].size();
            vector<string> ans;
            for(int i = 1 ; i < size ; ++i) {
                if(len + words[i].size() + 1 > L) {
                    string result = addSpace(words, start , i , len , L);
                    ans.push_back(result);
                    start = i;
                    len = words[i].size();
                } else {
                    len += words[i].size() + 1;
                }
            }
            //procee last
            string result = addLast(words, start , size , L);
            ans.push_back(result);
            return ans;
        }
    private:
        //[start,end)
        string addSpace(vector<string>& words , int start , int end ,  int len , int L) {
            int exspace = L - len;
            int cnt = end - start;
            string tmp = "";
            if(cnt == 1) {
                tmp = words[start];
                tmp.append(exspace , ' ');
            } else {
                int avespace = exspace / (cnt - 1);
                int reminder = exspace % (cnt - 1);
                for(int i = start ; i < end - 1 ; ++i) {
                    tmp += words[i];
                    tmp.append(avespace + 1 , ' ');
                    if(reminder) {
                        tmp.append(1 , ' ');
                        reminder --;
                    }
                }
                tmp += words[end-1];
            }
            return tmp;
        }
        string addLast(vector<string>& words , int start , int end , int L) {
            string tmp = words[start];
            for(int i = start + 1 ; i < end ; ++i) {
                tmp += " " + words[i];
            }
            if(tmp.size() < L) tmp.append(L - tmp.size() , ' ');
            return tmp;
        }
    };
  • 相关阅读:
    四则运算题目的程序
    Github注册账户过程
    目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?
    学习进度总结
    学习进度总结
    7月29 日实习日志及总结
    7月28日实习日志
    7月27实习日志
    7月26日实习日志
    7月25日实习日志
  • 原文地址:https://www.cnblogs.com/x1957/p/3522461.html
Copyright © 2011-2022 走看看