您的位置:首页 > 其它

211 Add and Search Word - Data structure design

2016-01-04 16:06 351 查看
//Trie 树 + 深搜
public class WordDictionary {

public TrieNode root;
public WordDictionary(){
root = new TrieNode();
}

public void addWord(String word) {
if(word==null||word.length()==0){
return;
}
char[] letters = word.toCharArray();
TrieNode node = root;
for(int i=0;i<letters.length;++i){
int pos = letters[i] - 'a';
if(node.son[pos]==null){
node.son[pos] = new TrieNode();
node.son[pos].var = letters[i];
}else{
++node.son[pos].num;
}
node = node.son[pos];
}
node.isEnd = true;
}

public boolean search(String word) {
if(word==null||word.length()==0){
return false;
}
char[] letters = word.toCharArray();
TrieNode node = root;
return subSearch(root, word, 0);

}

public boolean subSearch(TrieNode node, String str, int depth){
if(depth==str.length()){
if(node.isEnd==true){
return true;
}else{
return false;
}
}
char[] letters = str.toCharArray();
if(letters[depth]=='.'){
boolean res = false;
for(int i=0;i<26;++i){
if(node.son[i]!=null){
boolean flag = subSearch(node.son[i], str, depth + 1);
if(flag==true){
res = true;
}
}
}
return res;
}else{
int pos = letters[depth] - 'a';
if(node.son[pos]!=null){
return subSearch(node.son[pos], str, depth + 1);
}else{
return false;
}

}

}
}

class TrieNode {
public int num;
private int SIZE = 26;
public TrieNode[] son;
public char var;
public boolean isEnd;
public TrieNode(){
num = 1;
son = new TrieNode[SIZE];
isEnd = false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: