Leetcode 068文本左右对齐

地址

https://leetcode-cn.com/problems/text-justification/submissions/

描述

在这里插入图片描述

思想

在这里插入图片描述
在这里插入图片描述

代码

class Solution {
public:
    vector<string> fullJustify(vector<string>& words, int maxWidth) {
        vector<string> res;
        for(int i=0;i<words.size();){
            string line;
            int j=i+1;
            //枚举这行一共能放多少个单词
            int len=words[i].length();
            //注意这里要加上两个单词之间的间隙长度=1
            //此时被使用的单词为i~j-1
            while (j<words.size()&& len+1+words[j].length()<=maxWidth) {
                len+=words[j].length()+1;
                j++;
            }
            //根据j判断此时属于哪种情况
            if(j==words.size()||j==i+1){
                //说明此时为最后一行,或者行中只能放下一个单词。要求咱们左对齐
                line+=words[i];
                for(int k=i+1;k<j;k++) line +=' '+words[k];
                //后面剩余的位置用' '补齐
                while(line.size()<maxWidth) line.push_back(' ');
            }
            //说明此时要求我们进行左右两端对齐
            else{
                //计算一下本行一共有多少单词,i~j-1下标的单词被使用,总共有j-i个单词,就有j-i-1个缝隙
                int cnt=j-i-1;
                //计算剩余的空格有多少,由于上面计算时,加上了缝隙的个数,这里要还回来
                int r=maxWidth-len+cnt;
                line+=words[i];
                //开始填单词,由于要求如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。
                //举例还剩10个空格,但是只有3个缝隙,那么第1(10%3)个空格分到(10/3)+1个空格,后面都分到(10/3)个空格
                int k=0;
                while(k<r%cnt) line+=string (r/cnt+1,' ')+words[i+k+1],k++;
                while(k<cnt) line+=string(r/cnt,' ')+words[i+k+1],k++;
            }
            res.push_back(line);
            i=j;
        }
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值