https://leetcode.com/problems/add-and-search-word-data-structure-design/
Trie树要想到,另外就是细节char a = (char)(1 + 'b') 这里两个char相加减之后想要再得到char要强转一下。
public class WordDictionary {
TreeNode root = new TreeNode('a');
// Adds a word into the data structure.
public void addWord(String word) {
TreeNode node = root;
int index = 0;
while (index < word.length()) {
if (node.map.containsKey(word.charAt(index))) {
node = node.map.get(word.charAt(index++));
} else {
node.map.put(word.charAt(index), new TreeNode(word.charAt(index)));
node = node.map.get(word.charAt(index++));
}
}
node.isNode = 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) {
if (word == null) return false;
return search(word, root);
}
private boolean search(String word, TreeNode root) {
if (word.length() == 0 && root.isNode) return true;
else if (word.length() == 0) return false;
if (word.charAt(0) == '.') {
for (int i = 0; i < 26; i++) {
if (root.map.containsKey((char)(i + 'a')) && search(word.substring(1), root.map.get((char)(i + 'a')))) {
return true;
}
}
} else {
if (root.map.containsKey(word.charAt(0)) && search(word.substring(1), root.map.get(word.charAt(0)))) {
return true;
}
}
return false;
}
class TreeNode {
char val;
boolean isNode = false;
HashMap<Character, TreeNode> map = new HashMap<>();
public TreeNode(char val) {
this.val = val;
}
}
}
// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary = new WordDictionary();
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");