68. 文本左右对齐(简单模拟)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了68. 文本左右对齐(简单模拟)相关的知识,希望对你有一定的参考价值。

68. 文本左右对齐 (简单模拟)

先计算出当前行最多放多少个单词。

然后根据单词数算出间隔数和总空格数。

如果是最后一行,则每个间隔放一个空格。

否则放 s p a c e s g a p \\dfrac{spaces}{gap} gapspaces个,若 i − L < ( s p a c e ( m o d g a p ) ) i-L< (space\\pmod {gap}) iL<(space(modgap)) + 1 +1 +1

然后将最后一个单词的后面都补充空格。

参考代码

class Solution {
public:
    vector<string> fullJustify(vector<string>& words, int maxWidth) {
        vector<string> res;
        int n = words.size();
        for(int L = 0, R = 0; L < n; L = R ) {
            int w = words[ L ].length();         //记录当前行长度
            for(R++; R < n && w + 1 + words[ R ].length() <= maxWidth; R++) w += 1 + words[ R ].length();  //将单词长度加上1个空格计算进当前行长度
            int gap = R - L - 1;              //单词之间的间隔数
            int spaces = maxWidth - w + gap;       //该行的空格总数
            res.push_back("");
            for(int i = L; i < R - 1; i++ ) {      //处理最后一个单词前的单词,如果当前行只有一个单词就不会进入这里
                res.back() += words[ i ];
                res.back().append(R < n ? spaces / gap + ( (i - L) < (spaces % gap) ? 1 : 0) : 1, ' ');
                //如果R<n,代表当前不是最后一行,计算需要加几个空格
                //如果R==n,代表当前是最后一行,每个单词后面只加1个空格
            }
            res.back() += words[ R - 1 ];      //放入最后一个单词
            res.back().append(maxWidth - res.back().length(), ' ');
            //如果当前是最后一行,或者当前行只有一个单词,才会出现长度不够maxWidth,用空格补足
        }
        return res;
    }
};

以上是关于68. 文本左右对齐(简单模拟)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode No.68 文本左右对齐(模拟)

leetcode 每日一题 68. 文本左右对齐

LeetCode 68 文本左右对齐[贪心] HERODING的LeetCode之路

Leetcode 68.文本左右对齐

LeetCode 68. 文本左右对齐 / 1894. 找到需要补充粉笔的学生编号 / 600. 不含连续1的非负整数(数位dp,好好学)

文本左右对齐(字符串模拟)螺旋矩阵 II(数组矩阵)二叉树中的最大路径和(树深度优先搜索)