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编程语言。
该题考察的知识点包括:
- 字符串的基本操作,如拼接、获取长度等。
- 数组或列表的遍历和管理。
- 循环控制,以及条件判断。
- 字符串的填充和对齐操作。
代码解释:
- repeatChar 函数是一个辅助函数,用于生成重复某个字符若干次的字符串。它接受一个字符和重复次数作为参数,返回一个由重复字符组成的字符串。
- 在 arrangeWords 方法中,使用了类似的逻辑,通过遍历 words 数组来排列单词并根据指定的 maxWidth 进行格式化。
- 循环开始,初始化 i 为 0,然后进入一个外层循环,逐行处理。
- 内层循环中,使用 curWidth 来跟踪当前行的宽度,以便确定是否能够容纳更多的单词。
- 在内层循环中,首先计算 numSpaces,即每个单词之间需要的空格数,以保持当前行的总宽度为 maxWidth。
- 通过使用 repeatChar 辅助函数来填充空格,然后将单词添加到当前行的字符串中。
- 如果当前行的单词不足以填满 maxWidth,使用辅助函数 repeatChar 来填充剩余的空格。
- 最终,将当前行添加到 result 列表中,然后更新 i 为 j,以处理下一行。
- 循环结束后,将 result 列表转换为一个字符串数组,并返回作为结果。

美团公司氛围 2941人发布