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

将单词均匀排列

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param words string字符串一维数组
     * @param maxWidth int整型
     * @return string字符串一维数组
     */
    private String repeatChar(char c, int count) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < count; i++) {
            result.append(c);
        }
        return result.toString();
    }

    public String[] arrangeWords(String[] words, int maxWidth) {
        List<String> result = new ArrayList<>();
        int i = 0;

        while (i < words.length) {
            int j = i;
            int curWidth = 0;

            while (j < words.length && (curWidth + words[j].length() + j - i) <= maxWidth) {
                curWidth += words[j].length();
                j++;
            }

            int space = maxWidth - curWidth;
            StringBuilder line = new StringBuilder(words[i]);

            if (j < words.length) {
                for (int k = i + 1; k < j; k++) {
                    int numSpaces = (j - k == 1 ||
                                     j == words.length) ? 1 : (space + j - k - 2) / (j - k - 1);
                    line.append(repeatChar(' ', numSpaces));
                    space -= (numSpaces - 1);
                    line.append(words[k]);
                }

                if (line.length() < maxWidth) {
                    line.append(repeatChar(' ', maxWidth - line.length()));
                }
            } else {
                for (int k = i + 1; k < j; k++) {
                    line.append(' ');
                    line.append(words[k]);
                }

                if (line.length() < maxWidth) {
                    line.append(repeatChar(' ', maxWidth - line.length()));
                }
            }

            result.add(line.toString());
            i = j;
        }

        return result.toArray(new String[0]);
    }
}

Java编程语言。

该题考察的知识点包括:

  • 字符串的基本操作,如拼接、获取长度等。
  • 数组或列表的遍历和管理。
  • 循环控制,以及条件判断。
  • 字符串的填充和对齐操作。

代码解释:

  1. repeatChar 函数是一个辅助函数,用于生成重复某个字符若干次的字符串。它接受一个字符和重复次数作为参数,返回一个由重复字符组成的字符串。
  2. 在 arrangeWords 方法中,使用了类似的逻辑,通过遍历 words 数组来排列单词并根据指定的 maxWidth 进行格式化。
  3. 循环开始,初始化 i 为 0,然后进入一个外层循环,逐行处理。
  4. 内层循环中,使用 curWidth 来跟踪当前行的宽度,以便确定是否能够容纳更多的单词。
  5. 在内层循环中,首先计算 numSpaces,即每个单词之间需要的空格数,以保持当前行的总宽度为 maxWidth。
  6. 通过使用 repeatChar 辅助函数来填充空格,然后将单词添加到当前行的字符串中。
  7. 如果当前行的单词不足以填满 maxWidth,使用辅助函数 repeatChar 来填充剩余的空格。
  8. 最终,将当前行添加到 result 列表中,然后更新 i 为 j,以处理下一行。
  9. 循环结束后,将 result 列表转换为一个字符串数组,并返回作为结果。
全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 11:15
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 17:37
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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