想了想这玩意儿不就是个26叉树嘛。。
class Trie {
public Trie[] childrens = new Trie[26];
public boolean isEnd;
/** Initialize your data structure here. */
public Trie() {
}
/** Inserts a word into the trie. */
public void insert(String word) {
Trie cur = this;
for(int i=0;i<word.length();i++ ){
char c = word.charAt(i);
if(cur.childrens[c-'a']==null){ //这里记得写 不写的话会把以前存的那些单词都清空掉
cur.childrens[c-'a'] = new Trie();
}
cur = cur.childrens[c-'a'];
}
cur.isEnd=true;
}
/** Returns if the word is in the trie. */
public boolean search(String word) {
Trie cur = this;
for(int i=0;i<word.length();i++ ){
char c= word.charAt(i);
if(cur.childrens[c-'a']==null){
return false;
} else {
cur = cur.childrens[c-'a'];
}
}
if (cur.isEnd==true){
return true;
}
return false;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
public boolean startsWith(String prefix) {
Trie cur = this;
for(int i=0;i<prefix.length();i++ ){
char c= prefix.charAt(i);
if(cur.childrens[c-'a']==null){
return false;
} else {
cur = cur.childrens[c-'a'];
}
}
return true;
}
}
/**
* Your Trie object will be instantiated and called as such:
* Trie obj = new Trie();
* obj.insert(word);
* boolean param_2 = obj.search(word);
* boolean param_3 = obj.startsWith(prefix);
*/
递归法insert:
public void insert(Trie root ,String s,int i) {
if(i==s.length()) {
root.isEnd=true;
return;
}
char c=s.charAt(i);
System.out.println("目前轮询至:"+c);
if(root.childrens[c-'a']==null) {
root.childrens[c-'a'] = new Trie();
}
insert(root.childrens[c-'a'], s, i+1);
}