Leetcode 68. Text Justification

68. Text Justification

描述如下,要求从一个字符串数组,选择若干个单词组成一个新字符串,并相互之间对齐,注意以下几点:

1 单词直接至少相差一个空格;

2 每一行都要求左对齐;除了最后一行,其他行都要求右对齐,最后一个行,只要保证左对齐即可;

3 每一行元素总数一定一样,若缺少用空格补,原则是要求左右空格数目均匀,若做不到均匀则左侧较多空格。

例如:

words: ["This", "is", "an", "example", "of", "text", "justification."]
L: 16.

结果:

[
   "This    is    an",
   "example  of text",
   "justification.  "
]

 vector<string> fullJustify(vector<string>& words, int maxWidth) {
vector<string> res;
int index=0;
int cursize=0;//所在行当前长度
int bgn=0;//上一行开始位置
while(index<words.size()){
int newsize=cursize+words[index].size()+index-bgn;
if(newsize<=maxWidth){cursize+=words[index].size();index++;}
else{
    string tmp="";
    int spacecnt=(index-bgn>1)?index-bgn-1:1;//正常的单词之间空格一个,这里求得是总的个数
    int spacelen=(maxWidth-cursize)/spacecnt;//每个单词之间实际空格长度
    for(int i=0;i<index-bgn;i++){
	tmp+=words[i+bgn];
	if(index-bgn!=1&&i==index-bgn-1)break;//该行不是一个单词组成时,最后一个单词不加空格,以保证右靠齐
        if(i<maxWidth-cursize-spacecnt*(spacelen))
	    tmp+=string(spacelen+1,' ');//不均时左多
	else
	    tmp+=string(spacelen,' ');
                                 }
    res.push_back(tmp);
      cursize=0;bgn=index;
     }

                     }
//处理最后一行
 string tmp="";
for(int i=bgn;i<index;i++){
    tmp+=words[i];
    if(i==index-1)break;//最后一个单词不加空格
    else tmp+=" ";
                           }
tmp+=string(maxWidth-cursize-(index-bgn-1),' ');
res.push_back(tmp);
return res;
}
参考: 文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值