題意:給定一組單詞序列和一個最大的單詞長度,要求按行顯示單詞,單詞之間有空格,每行的最大長度不能超過給定值。對於非末行,空格的長度均勻分配,對於末行,左對齊顯示,即單詞之間只能有一個空格,剩餘的空格在最後一個單詞之後。
思路:沒什麼特別的,純模擬題。
代碼:
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;
}