2452-距离字典两次编辑以内的单词

Raphael Liu Lv10

给你两个字符串数组 queriesdictionary 。数组中所有单词都只包含小写英文字母,且长度都相同。

一次 编辑 中,你可以从 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] 都只包含小写英文字母。

视频讲解 已出炉,欢迎点赞三连,在评论区分享你对这场双周赛的看法~


暴力枚举即可。

[sol1-Python3]
1
2
3
4
5
6
7
8
9
class Solution:
def twoEditWords(self, queries: List[str], dictionary: List[str]) -> List[str]:
ans = []
for q in queries:
for s in dictionary:
if sum(x != y for x, y in zip(q, s)) <= 2:
ans.append(q)
break
return ans
[sol1-Go]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func twoEditWords(queries, dictionary []string) (ans []string) {
for _, q := range queries {
for _, s := range dictionary {
c := 0
for i := range s {
if q[i] != s[i] {
c++
}
}
if c <= 2 {
ans = append(ans, q)
break
}
}
}
return
}

复杂度分析

  • 时间复杂度:O(mkn),其中 m 为 queries 的长度,k 为 dictionary 的长度,n 为 queries}[i] 的长度。
  • 空间复杂度:O(1),仅用到若干变量。
 Comments
On this page
2452-距离字典两次编辑以内的单词