单词缩写
难度:
标签:
题目描述
代码结果
运行时间: 60 ms, 内存: 20.2 MB
/*
* 题目思路:
* 1. 使用Java Stream对数组进行遍历。
* 2. 对于每个单词,使用map函数进行缩写处理。
* 3. 最终使用forEach输出每个缩写后的单词。
*/
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class WordAbbreviationStream {
public static String abbreviateWord(String word) {
if (word.length() <= 2) {
return word; // 如果单词长度小于等于2,则直接返回原单词
}
int length = word.length() - 2; // 中间部分的长度
return word.charAt(0) + String.valueOf(length) + word.charAt(word.length() - 1);
}
public static void main(String[] args) {
List<String> words = Arrays.asList("international", "local", "a", "ab");
words.stream()
.map(WordAbbreviationStream::abbreviateWord)
.forEach(System.out::println);
}
}
解释
方法:
此题解的核心思路是缩写给定列表中的单词。如果单词长度小于4,不进行缩写。对于其他单词,从最短可能的缩写开始尝试,直到找到一个不与其他单词的缩写冲突的缩写。此过程使用两个主要数据结构:'cache'用来存储每个缩写对应的单词(如果存在冲突,则设置为空字符串),'ret'用来存储每个单词对应的最终缩写结果。函数 'ga' 用于生成一个单词的缩写,'add' 函数尝试为一个单词找到一个合适的缩写并处理冲突。最后,根据输入单词的顺序返回缩写结果。
时间复杂度:
O(n * k^2) 其中 n 是单词数量,k 是单词的平均长度
空间复杂度:
O(n * k) 其中 n 是单词数量,k 是单词的平均长度
代码细节讲解
🦆
在函数`ga`中,`np`参数的作用是什么,以及如何决定其值?
▷🦆
如何确保缩写`a`在`cache`中的管理不会导致错误覆盖或丢失原有数据?
▷🦆
在处理冲突的`add`函数中,一旦发现缩写`a`已经存在于`cache`中,为什么要将`cache[a]`设置为空字符串?这样做有什么具体的目的或好处?
▷🦆
函数`add`中使用了递归调用(`add(w2)`)来处理缩写冲突,这种递归调用可能存在哪些潜在的风险或效率问题?
▷