目标
给你两个字符串数组 queries 和 dictionary 。数组中所有单词都只包含小写英文字母,且长度都相同。
一次 编辑 中,你可以从 queries 中选择一个单词,将任意一个字母修改成任何其他字母。从 queries 中找到所有满足以下条件的字符串:不超过 两次编辑内,字符串与 dictionary 中某个字符串相同。
请你返回 queries 中的单词列表,这些单词距离 dictionary 中的单词 编辑次数 不超过 两次 。单词返回的顺序需要与 queries 中原本顺序相同。
示例 1:
输入:queries = ["word","note","ants","wood"], dictionary = ["wood","joke","moat"]
输出:["word","note","wood"]
解释:
- 将 "word" 中的 'r' 换成 'o' ,得到 dictionary 中的单词 "wood" 。
- 将 "note" 中的 'n' 换成 'j' 且将 't' 换成 'k' ,得到 "joke" 。
- "ants" 需要超过 2 次编辑才能得到 dictionary 中的单词。
- "wood" 不需要修改(0 次编辑),就得到 dictionary 中相同的单词。
所以我们返回 ["word","note","wood"] 。
示例 2:
输入:queries = ["yes"], dictionary = ["not"]
输出:[]
解释:
"yes" 需要超过 2 次编辑才能得到 "not" 。
所以我们返回空数组。
说明:
- 1 <= queries.length, dictionary.length <= 100
- n == queries[i].length == dictionary[j].length
- 1 <= n <= 100
- 所有 queries[i] 和 dictionary[j] 都只包含小写英文字母。
思路
有两个字符串数组 queries 和 dictionary,它们的字符串长度都相等,每次编辑可以将 queries 中的任意字符串的任意一个字母改成其它字母,按 queries 顺序返回最多两次编辑能够与 dictionary 中某个字符串相同的 queries[i]。
暴力枚举,比较 queries[i] 与 dictionary 中的每个字符串不同的字符个数,如果小于等于 2 加入结果集合。
代码
/**
* @date 2026-04-22 9:04
*/
public class TwoEditWords2452 {
public List<String> twoEditWords_v2(String[] queries, String[] dictionary) {
List<String> res = new ArrayList<>();
for (String query : queries) {
if (check(query, dictionary)) {
res.add(query);
}
}
return res;
}
public boolean check(String query, String[] dictionary) {
for (String dict : dictionary) {
int dis = 0;
for (int k = 0; k < dict.length() && dis <= 2; k++) {
if (query.charAt(k) != dict.charAt(k)) {
dis++;
}
}
if (dis <= 2) {
return true;
}
}
return false;
}
}
性能












