您的位置:首页 > 其它

Leetcode 211. Add and Search Word - Data structure design

2017-04-13 08:10 423 查看
public class WordDictionary {

private TrieNode root;
public class TrieNode {
TrieNode[] arr;
boolean isEnd;
public TrieNode() {
arr = new TrieNode[26];
}
}
public WordDictionary() {
root = new TrieNode();
}

public void addWord(String word) {
TrieNode p = root;
for (int i = 0; i < word.length(); i++) {
int index = word.charAt(i)-'a';
if (p.arr[index] == null) {
TrieNode temp = new TrieNode();
p.arr[index] = temp;
p = temp;
}
else {
p = p.arr[index];
}
}
p.isEnd = true;
}

public boolean search(String word) {
TrieNode p = root;
return match(word.toCharArray(), 0, p);
}

public boolean match(char[] chars, int k, TrieNode p) {
if (k == chars.length) return p.isEnd;
if (chars[k] != '.') {
return p.arr[chars[k] -'a'] != null && match(chars, k+1,p.arr[chars[k]-'a']);
}
else {
for (int i = 0; i < p.arr.length; i++) {
if (p.arr[i] != null) {
if (match(chars, k + 1, p.arr[i])) return true;
}
}
}
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: