距离字典两次编辑以内的单词
难度:
标签:
题目描述
代码结果
运行时间: 39 ms, 内存: 16.2 MB
/*
* 题目思路:
* 使用Java Stream API来解决这个问题。我们可以利用filter来筛选出符合条件的单词。
* 对于每个query,通过dictionary中的单词计算编辑距离,若不超过2则加入结果集。
*/
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Solution {
public List<String> twoEditWords(String[] queries, String[] dictionary) {
return Arrays.stream(queries)
.filter(query -> Arrays.stream(dictionary)
.anyMatch(word -> isWithinTwoEdits(query, word)))
.collect(Collectors.toList());
}
// 判断两个字符串的编辑距离是否不超过2
private boolean isWithinTwoEdits(String s1, String s2) {
int differences = 0;
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
differences++;
if (differences > 2) {
return false;
}
}
}
return true;
}
}
解释
方法:
该题解采用了直接的暴力匹配方法来解决问题。对于每个查询词 (queries 中的词),它会与字典 (dictionary) 中的每个词进行比较。对每一对词,我们逐字符比较两个字符串,计算它们在每个位置上字符不同的数量,这个数量即为编辑距离。如果编辑距离在两次编辑(包括两次)以内,我们就认为这个查询词满足条件,并将其加入结果列表中。一旦一个查询词与字典中的某个词的编辑距离小于等于2,我们就结束对这个查询词的检查,因为我们只需要确定是否存在至少一个这样的字典词即可。
时间复杂度:
O(m * k * n)
空间复杂度:
O(m)
代码细节讲解
🦆
此题解中使用暴力匹配方法,对于每个queries中的单词,你是如何确定何时停止与dictionary中单词的比较?
▷🦆
如果queries和dictionary中的单词长度不相同,此题解是否仍适用?如果不适用,应如何修改代码以处理不同长度的单词?
▷🦆
在比较两个单词的编辑距离时,你是怎样处理已经发现的编辑距离超过2的情况?
▷