重新排列句子中的单词
难度:
标签:
题目描述
代码结果
运行时间: 32 ms, 内存: 0.0 MB
/*
* 思路:
* 1. 将句子按照空格分割成单词数组。
* 2. 使用 Java Stream API 基于单词长度进行排序。
* 3. 保留相同长度单词的相对顺序。
* 4. 将排序后的单词数组重新组合成句子,并将第一个单词的首字母大写。
*/
import java.util.*;
import java.util.stream.*;
public class Solution {
public String arrangeWords(String text) {
// 将第一个字母变成小写
text = text.substring(0, 1).toLowerCase() + text.substring(1);
// 按空格分割成单词数组
String[] words = text.split(" ");
// 使用流排序并收集结果
words = Arrays.stream(words)
.sorted(Comparator.comparingInt(String::length))
.toArray(String[]::new);
// 将第一个单词的首字母变成大写
words[0] = words[0].substring(0, 1).toUpperCase() + words[0].substring(1);
// 重新组合成句子
return String.join(" ", words);
}
}
解释
方法:
题解通过使用哈希表来存储相同长度的单词,键是单词的长度,值是一个列表,包含该长度的所有单词。首先,遍历输入的句子并拆分为单词。对于第一个单词,将其转换为小写(因为在最终输出中,我们将整个句子的首字母大写,其他字母小写)。然后根据单词的长度将它们添加到哈希表中的相应列表。之后,按照单词长度的升序对哈希表的键进行排序,并将相应的单词列表合并为结果字符串。最后,将结果字符串的首字母大写后返回。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
为什么在处理第一个单词时需要将其转换为小写,最后再将整个结果字符串的首字母大写?
▷🦆
哈希表的键是单词的长度,如果两个长度相同的单词在原句子中的顺序很重要,哈希表是否能保留这种顺序?
▷🦆
请问为什么在拼接单词到结果字符串时要特别处理第一个单词前不加空格?
▷🦆
在整个算法中,是否有更高效的数据结构来代替哈希表和列表的组合,以处理单词的排序和存储?
▷