单词的添加与查找
题目
设计一个包含下面两个操作的数据结构:addWord(word), search(word)
addWord(word)会在数据结构中添加一个单词。而search(word)则支持普通的单词查询或是只包含.和a-z的简易正则表达式的查询。
一个 . 可以代表一个任何的字母。注意事项
你可以假设所有的单词都只包含小写字母 a-z。样例
addWord(“bad”)
addWord(“dad”)
addWord(“mad”)
search(“pad”) // return false
search(“bad”) // return true
search(“.ad”) // return true
search(“b..”) // return true题解
参看442.Implement Trie-实现 Trie(中等题),只需额外处理一下通配符的问题。
class TrieNode
{
private TrieNode[] children;
public boolean hasWord;
// Initialize your data structure here.
public TrieNode()
{
children = new TrieNode[26];
hasWord = false;
}
public void insert(String word, int index)
{
if (index == word.length())
{
this.hasWord = true;
return;
}
int pos = word.charAt(index) - 'a';
if (children[pos] == null)
{
children[pos] = new TrieNode();
}
children[pos].insert(word, index + 1);
}
public boolean find(String word, int index)
{
if (index == word.length())
{
return this.hasWord;
}
if (word.charAt(index) == '.')
{
boolean res = false;
for (int i=0;i<children.length && !res;i++)
{
if (children[i] != null)
{
res = children[i].find(word, index + 1);
}
}
return res;
}
else
{
int pos = word.charAt(index) - 'a';
return children[pos] == null ? false : children[pos].find(word, index + 1);
}
}
}
public class WordDictionary {
private TrieNode root;
WordDictionary()
{
root = new TrieNode();
}
// Adds a word into the data structure.
public void addWord(String word) {
root.insert(word,0);
}
// Returns if the word is in the data structure. A word could
// contain the dot character '.' to represent any one letter.
public boolean search(String word) {
return root.find(word, 0);
}
}
// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary = new WordDictionary();
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");
Last Update 2016.11.18