📅  最后修改于: 2023-12-03 15:39:55.974000             🧑  作者: Mango
本题为 UGC NET CS 2018 年 7 月 - II 的试题,是计算机科学领域的一道经典问题。此题要求程序员实现一个函数,将一个字符串中的所有单词按照长度从小到大进行排序,并返回排好序的字符串。
public String sortWordsByLength(String input)
input
:要排序的字符串,可能包含大小写字母、数字和标点符号。按照长度从小到大排序过后的字符串。
String input = "This is a test string to sort words by length.";
String expectedOutput = "a by is to This test sort words string length.";
String output = sortWordsByLength(input);
assertEquals(expectedOutput, output);
String input = "The quick brown fox jumps over the lazy dog.";
String expectedOutput = "The fox the dog. over quick lazy brown jumps...";
String output = sortWordsByLength(input);
assertEquals(expectedOutput, output);
对于每个单词,计算其长度并存储在一个 Map
中,同时将每个单词存储到一个 List
中。然后根据单词长度从小到大对 List
进行排序。最后按顺序拼接排序后的单词,得到排序后的字符串。
public String sortWordsByLength(String input) {
// 将单词长度存储在 map 中
Map<String, Integer> wordLengthMap = new HashMap<>();
// 存储单词列表
List<String> wordList = new ArrayList<>();
// 依据空格将字符串拆解成单词
String[] words = input.split(" ");
// 遍历单词列表
for (String word : words) {
// 计算单词长度
int length = word.replaceAll("[^a-zA-Z0-9]", "").length();
// 将单词长度存储起来
wordLengthMap.put(word, length);
// 将单词添加到单词列表中
wordList.add(word);
}
// 根据单词长度从小到大对单词列表进行排序
Collections.sort(wordList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return wordLengthMap.get(o1) - wordLengthMap.get(o2);
}
});
// 按顺序拼接排好序的单词
StringBuilder resultBuilder = new StringBuilder();
for (String word : wordList) {
resultBuilder.append(word);
resultBuilder.append(" ");
}
// 返回排序后的字符串
return resultBuilder.toString().trim();
}