题解 | #将单词均匀排列#

将单词均匀排列

https://www.nowcoder.com/practice/47cb397f179a46e1ac0f2e388e1f844a

考察的知识点:字符串;

解答方法分析:

  1. 创建一个空的结果列表 result,并设置索引 i 的初始值为 0。
  2. 使用 while 循环遍历输入的单词列表,循环条件为 i 的值小于单词列表的长度。
  3. 在循环中,使用变量 j 初始化为 i,并使用变量 curWidth 来记录当前行已经存在的字符宽度。在内层循环中,通过判断当前行的字符宽度加上下一个单词的字符宽度以及单词之间的空格数量是否小于等于最大宽度,来找到当前行能容纳的单词范围。如果满足条件,则更新 curWidth、递增 j。
  4. 在找到当前行的单词范围后,用最大宽度减去当前行的字符宽度,得到剩余空格的数量。
  5. 在内层循环中,从当前行的起始单词到结束单词,逐个添加单词到 line 字符串中。在每个单词之间,根据剩余空格的数量,计算并添加适当的空格数量。如果是最后一行,或者当前行只有一个单词,或者已经遍历至最后一个单词,只需要添加一个空格。
  6. 如果当前行的字符长度小于最大宽度,说明需要左对齐,并在末尾添加额外的空格,使得字符串长度等于最大宽度。
  7. 将当前行的字符串 line 添加到结果列表 result 中。
  8. 将索引 i 更新为内层循环结束时的 j,以便继续处理下一行。
  9. 在循环结束后,返回结果列表 result。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param words string字符串vector
     * @param maxWidth int整型
     * @return string字符串vector
     */
    vector<string> arrangeWords(vector<string>& words, int maxWidth) {
        vector<string> result;
        int i = 0;
        while (i < words.size()) {
            int j = i;
            int curWidth = 0;
            while (j < words.size() && (curWidth + words[j].size() + j - i) <= maxWidth){
                curWidth += words[j].size();
                j++;
            }
            int space = maxWidth - curWidth;
            string line = words[i];
            if (j < words.size()) {
                for (int k = i + 1; k < j; k++) {
                    int numSpaces = 1;
                    if (j - k == 1 || j == words.size()) {
                        numSpaces = 1;
                    } else {
                        numSpaces = (space + j - k - 2) / (j - k - 1);
                    }
                    line += string(numSpaces, ' ');
                    space -= (numSpaces - 1);
                    line += words[k];
                }
                if (line.size() < maxWidth) {
                    line += string(maxWidth - line.size(), ' ');
                }
            } else {
                for (int k = i + 1; k < j; k++) {
                    line += " ";
                    line += words[k];
                }
                if (line.size() < maxWidth) {
                    line += string(maxWidth - line.size(), ' ');
                }
            }
            result.push_back(line);
            i = j;
        }
        return result;
    }
};

全部评论

相关推荐

07-17 11:50
门头沟学院 Java
投递腾讯等公司7个岗位
点赞 评论 收藏
分享
码农索隆:想看offer细节
点赞 评论 收藏
分享
来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务