【leetCode】Text Justification

来源:互联网 发布:倒卖数据什么罪 编辑:程序博客网 时间:2024/06/05 05:23

题意:给定一组单词序列和一个最大的单词长度,要求按行显示单词,单词之间有空格,每行的最大长度不能超过给定值。对于非末行,空格的长度均匀分配,对于末行,左对齐显示,即单词之间只能有一个空格,剩余的空格在最后一个单词之后。

思路:没什么特别的,纯模拟题。

代码:

vector<string> fullJustify(vector<string>& words, int maxWidth){    vector<int> length;    vector<string> ans;    int i,j,k,last,total,remain,a,ns,size=words.size();    if(size==0 ) return ans;    for(i=0; i<size; i++) length.push_back(words[i].length());    last=0;    total=0;    for(i=0; i<size; i++)    {        total=total+words[i].length()+(i==last?0:1);        if(total>maxWidth)        {            cout<<i<<endl;            total=0;            for(k=last; k<i; k++)total+=words[k].length();            remain=maxWidth-total;            i--;            string temp="";            for(k=last; k<=i; k++)            {                temp+=words[k];                if(k!=i)                {                    ns=remain/(i-k);                    if(remain%(i-k)!=0) ns++;                    for(j=0; j<ns; j++) temp+=" ";                    remain=remain-ns;                }            }            for(k=0;k<remain;k++) temp+=" ";            ans.push_back(temp);            total=0;            last=i+1;        }        else if(i==size-1)        {            total=0;            for(k=last; k<=i; k++)total+=words[k].length();            remain=maxWidth-total;            string temp="";            for(k=last; k<=i; k++)            {                temp+=words[k];                if(remain>0)temp+=" ";                remain--;            }            for(k=0;k<remain;k++) temp+=" ";            ans.push_back(temp);        }    }    return ans;}


0 0