持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第33天,点击查看活动详情
力扣——6228. 距离字典两次编辑以内的单词
6228. 距离字典两次编辑以内的单词
难度中等0收藏分享切换为英文接收动态反馈
给你两个字符串数组 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 <= 100n == queries[i].length == dictionary[j].length1 <= n <= 100- 所有
queries[i]和dictionary[j]都只包含小写英文字母。
问题解析
数组很小,我们可以直接暴力枚举。
对于queries[i],我们用dictionary中的每个单词依次比较。
- 当queries[i]和dictionary[j]长度不相等时,这两个单词没法匹配。
- 依次遍历每个位置的字符,如果两个字符串当前位置的字符不一样,计数器++,如果比较结束后计数器小于等于2,就加入答案数组里,并且拿另一个queries[i]重新开始和dictionary中的每个单词比较。如果计数器大于2,则选择下一个dictionary[j]继续匹配。
AC代码
class Solution {
public:
vector<string> twoEditWords(vector<string>& queries, vector<string>& dictionary) {
vector<string>res;
int n=queries.size(),m=dictionary.size();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int cnt=0;
if(queries[i].size()!=dictionary[j].size())continue;
int len=queries[i].size();
for(int k=0;k<len;k++)
{
if(queries[i][k]!=dictionary[j][k])cnt++;
}
if(cnt<=2)
{
res.push_back(queries[i]);
break;
}
}
}
return res;
}
};