LeetCode-211-添加与搜索单词-数据结构设计

题目

请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。

实现词典类 WordDictionary

  • WordDictionary() 初始化词典对象
  • void addWord(word)word 添加到数据结构中,之后可以对它进行匹配
  • bool search(word) 如果数据结构中存在字符串与 word 匹配,则返回 true ;否则,返回 falseword 中可能包含一些 '.' ,每个 . 都可以表示任何一个字母。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
输入:
["WordDictionary","addWord","addWord","addWord","search","search","search","search"]
[[],["bad"],["dad"],["mad"],["pad"],["bad"],[".ad"],["b.."]]
输出:
[null,null,null,null,false,true,true,true]

解释:
WordDictionary wordDictionary = new WordDictionary();
wordDictionary.addWord("bad");
wordDictionary.addWord("dad");
wordDictionary.addWord("mad");
wordDictionary.search("pad"); // 返回 False
wordDictionary.search("bad"); // 返回 True
wordDictionary.search(".ad"); // 返回 True
wordDictionary.search("b.."); // 返回 True

提示:

  • 1 <= word.length <= 25
  • addWord 中的 word 由小写英文字母组成
  • search 中的 word 由 '.' 或小写英文字母组成
  • 最多调用 104addWordsearch

题解

这一题的思路和208其实是类似的,只有搜索的函数有变化。

搜索的时候如果是字母,就获取当前字母所在的位置,然后往后搜索;

如果遇到.了,需要遍历所有items位置,找到一个不为空的往下搜索;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class WordDictionary {
private WordDictionary[] items;
boolean isEnd;

public WordDictionary() {
items = new WordDictionary[26];
}

public void addWord(String word) {
WordDictionary curr = this;
int n = word.length();
for (int i = 0; i < n; i++) {
int index = word.charAt(i) - 'a';
if (curr.items[index] == null)
curr.items[index] = new WordDictionary();
curr = curr.items[index];
}
curr.isEnd = true;
}

public boolean search(String word) {
return search(this, word, 0);
}

private boolean search(WordDictionary curr, String word, int start) {
int n = word.length();
if (start == n)
return curr.isEnd;
char c = word.charAt(start);
if (c != '.') {
WordDictionary item = curr.items[c - 'a'];
return item != null && search(item, word, start + 1);
}

for (int j = 0; j < 26; j++) {
if (curr.items[j] != null && search(curr.items[j], word, start + 1))
return true;
}
return false;
}
}

LeetCode-211-添加与搜索单词-数据结构设计
https://excelius.xyz/leetcode-211-添加与搜索单词-数据结构设计/
作者
Ther
发布于
2024年8月6日
许可协议