将句子排序
难度:
标签:
题目描述
代码结果
运行时间: 20 ms, 内存: 0.0 MB
/*
* 思路:
* 1. 将输入字符串按空格分割成单词数组。
* 2. 使用流根据每个单词末尾的数字进行排序。
* 3. 移除每个单词末尾的数字。
* 4. 将单词数组拼接成原始顺序的句子。
*/
import java.util.Arrays;
import java.util.stream.Collectors;
public class Solution {
public String sortSentence(String s) {
return Arrays.stream(s.split(" "))
.sorted((a, b) -> Character.getNumericValue(a.charAt(a.length() - 1)) - Character.getNumericValue(b.charAt(b.length() - 1)))
.map(word -> word.substring(0, word.length() - 1))
.collect(Collectors.joining(" "));
}
}
解释
方法:
这个解题思路基于两步处理。首先,将字符串s按空格分割得到单词数组。然后,根据每个单词末尾的数字(从1到9),将单词放到一个新的数组中正确的位置。数字在单词中的位置确定了单词在原句子中的顺序。这个数字随后从单词中移除,得到的单词是原始单词,无数字。最后,新数组中的单词按顺序连接起来,形成一个整理后的句子。
时间复杂度:
O(n^2)
空间复杂度:
O(n)
代码细节讲解
🦆
在处理句子排序时,为什么选择使用数字在单词中的存在作为判断基准,而不是其他特征?
▷🦆
算法中内层循环检查数字是否在单词中使用了哪种具体的字符串操作方法,这种方法是否最优?
▷🦆
你如何处理字符串中潜在的重复数字,比如单词 'this11' 如何避免误判为 'this1'?
▷🦆
代码使用了两个数组,一个用于分割单词,一个用于重排单词。是否有必要使用两个数组,还是可以通过原地修改达到相同的效果?
▷