LeetCode 68. Text Justification调试模板-wowAC

此代码为了方便大家调试用,使用的时候直接用自己的Solution类覆盖代码中的类,程序的输入文件路径默认在桌面的data_in.txt,使用的时候直接将LeetCode的case复制进文件即可。如下图所示。

image.png

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <cstdlib>
#include <cstdio>

using namespace std;

/***************改成自己的代码****************/
class Solution {
public:
    vector<string> fullJustify(vector<string>& words, int maxWidth) {
        int i = 0, j = -1, width = 0;
        vector<string> res;

        while(1) {
            while(j+1<words.size()) {
                 if(width+words[j+1].length()+j+1-i <= maxWidth) {
                     width += words[j+1].length();
                     j++;
                 }else
                    break;
            }

            if(i > j) break;

            string line = "";
            if(j == words.size()-1) {  //最后一行
                for(int k=i; k<=j; k++) {
                    line += words[k];
                    if(k == j) continue;
                    line += ' ';
                }
            }else { //非最后一行
                int space = maxWidth - width, base, extra;
                if(i != j) {
                    base = space / (j-i);
                    extra = space % (j-i);
                }
                for(int k=i; k<=j; k++) {
                    line += words[k];
                    if(k==j) continue;
                    line += string(base, ' ');
                    if(extra> 0) {
                        line += " ";
                        extra--;
                    }
                }

            }

            line += string(maxWidth - line.length(), ' ');
            //cout<<line<<" "<<line.length()<<endl;
            res.push_back(line);
            i = j+1; j = i-1;
            width = 0;
        }
        return res;
    }
};
/***************到此为止****************/

/***************不要修改这些代码****************/
vector<string> split_string(const string& s, const string& c)
{
    vector<string> v;
    string::size_type pos1, pos2;
    pos2 = s.find(c);
    pos1 = 0;
    while(string::npos != pos2)
    {
        v.push_back(s.substr(pos1+1, pos2-pos1-2));

        pos1 = pos2 + c.size();
        pos2 = s.find(c, pos1);
    }
    if(pos1 != s.length())
        v.push_back(s.substr(pos1+1, s.length()-pos1-2));
    return v;
}

vector<string> parse_string(string line) {
    int i = 0, j = line.length()-1;
    while(i<line.length() && line[i]!= '[') i++;
    while(j>=0 && line[j]!=']') j--;
    line = line.substr(i+1, j-i-1);
    return split_string(line, ",");
}

int string_to_int(const string &s) {
    return atoi(s.c_str());
}

void print_res(vector<string> &res) {
    cout<<"[";
    for(int i=0; i<res.size(); i++) {
        cout<<"\""<<res[i]<<"\"";
        if(i != res.size()-1)
            cout<<",";
    }
    cout<<"]"<<endl;
}
/***************完毕****************/

int main()
{
    //改成自己的输入路径,注意用双斜杠分割 默认输入文件为桌面的data_in.txt
    fstream fin("C:\\Users\\xingxing\\Desktop\\data_in.txt");
    string line;
    Solution solu;
    int kase = 1;
    while(getline(fin, line)) {
        if(line == "") continue;
        vector<string> s = parse_string(line);
        getline(fin, line);
        int num = string_to_int(line);


        //调用解决方案
        vector<string> res = solu.fullJustify(s, num);
        //输出答案
        cout<<"case"<<kase++<<": "<<endl;
        print_res(res);
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注