Trie+递归
class WordDictionary {
Trie root;
/**
* Initialize your data structure here.
*/
public WordDictionary() {
root = new Trie();
}
/**
* Adds a word into the data structure.
*/
public void addWord(String word) {
Trie r = root;
for (char ch : word.toCharArray()) {
if (r.children[ch - 'a'] == null) {
r.children[ch - 'a'] = new Trie(ch);
}
r = r.children[ch - 'a'];
}
r.isEnd = true;
}
/**
* 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) {
Trie r = root;
return search(r, word);
}
public boolean search(Trie r, String word) {
for (int k = 0; k < word.length(); k++) {
char ch = word.charAt(k);
if (ch == '.') {
for (int i = 0; i < 26; i++) {
if (r.children[i] != null) {
boolean find = search(r.children[i], word.substring(k + 1));
if (find) return true;
}
}
return false;
} else {
if (r.children[ch -'a'] == null) return false;
r = r.children[ch - 'a'];
}
}
return r.isEnd;
}
class Trie {
char c;
boolean isEnd;
Trie[] children;
public Trie() {
children = new Trie[26];
}
public Trie(char c) {
this.c = c;
children = new Trie[26];
}
}
}