public class Prim {
public static class TrieNode{
public int path;//所有字符串经过该节点的次数
public int end;//以该节点结束的字符串
public TrieNode[] nexts;//比如只对字符串的问题,这里表示每个节点有26种方式延伸出去a-z
public TrieNode() {
int path=0;
int end=0;
nexts=new TrieNode[26];
}
}
public static class Trie{
private TrieNode root;
public Trie() {
root=new TrieNode();
}
public void insert(String word) {
if(word==null)
return;
char[] chs=word.toCharArray();
TrieNode node=root;
int index=0;
for(int i=0;i<chs.length;i++) {
index=chs[i]-'a';
if(node.nexts[index]==null)
node.nexts[index]=new TrieNode();
node=node.nexts[index];
node.path++;
}
node.end++;
}
public void delete(String word) {
if(search(word)!=0)
{
char[] chs=word.toCharArray();
TrieNode node=root;
int index=0;
for(int i=0;i<chs.length;i++) {
index=chs[i]-'a';
if(--node.nexts[index].path==0) {
node.nexts[index]=null;
return;
}
node=node.nexts[index];
}
node.end--;
}
}
public int search(String word) {
if(word==null)
return 0;
char[] chs=word.toCharArray();
TrieNode node=root;
int index=0;
for(int i=0;i<chs.length;i++) {
index=chs[i]-'a';
if(node.nexts[index]==null)
return 0;
node=node.nexts[index];
}
return node.end;
}
public int prefixNumber(String pre) {//比如以“ab”开头的字符串的个数
if(pre==null)
return 0;
char[] chs=pre.toCharArray();
TrieNode node=root;
int index=0;
for(int i=0;i<chs.length;i++) {
index=chs[i]-'a';
if(node.nexts[index]==null)
return 0;
node=node.nexts[index];
}
return node.path;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
02-18
1460

02-21