LeetCode 068 Text Justification

本文介绍了一种算法,用于处理字符串数组(英文单词)及指定的行宽,以实现美观的排版效果。该算法确保每行尽可能多地放置单词,并在单词间平均分配空格,若无法平均分配则将多余空格置于左侧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:输入一个字符串数组,每个字符串代表一个英文单词;以及一个正整数L,代表每行的长度。要求按照L进行排版,按顺序处理每一行时,行中尽可能放下最多的单词。单词间如果有额外的空格,空格要平均在单词间分配,如果无法平均分配,则将多余的空格在左边依次分配。

题目描述已经很详细了,直接实现即可。

代码:

    vector<string> fullJustify(vector<string>& words, int maxWidth) {
        vector<string> result;

        if(maxWidth == 0) {
            result.push_back("");
            return result;
        }

        string line;
        int index = 0;
        while(index < words.size()) {
            int begin = index;
            int end = index + 1;
            int num = words[begin].length();
            line = "";
            while(index < words.size()) {
                index++;

                if(index < words.size() && num + 1 + words[index].length() <= maxWidth) {
                    num += 1 + words[index].length();
                    end = index + 1;
                }
                else {
                    end = index;
                    break;
                }
            }
            int space = maxWidth - (num - (end - begin - 1));
            int spacePerWord;
            if(end > begin + 1)
                spacePerWord = space / (end - begin - 1);
            if(index == words.size())
                spacePerWord = 1;
            line += words[begin];
            for(int i = begin + 1 ; i < end ; i++) {
                for(int j = 0 ; j < spacePerWord ; j++) {
                    line += ' ';
                }
                if(index < words.size() && (i - begin - 1) < space % (end - begin - 1)) 
                    line += ' ';
                line += words[i];
            }
            if(end == begin + 1) {
                while(space--) {
                    line += ' ';
                }
            }
            if(index == words.size()) {
                while(line.length() < maxWidth)
                    line += ' ';
            }
            result.push_back(line);
        }
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值