Advertisement
Guest User

Trie.java

a guest
Aug 28th, 2013
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.32 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Trie{
  4.     class Node{
  5.         int count;
  6.         Node[] children;
  7.         boolean isEnd;
  8.         public Node(){
  9.             this.children = new Node[26];
  10.             this.count = 0;
  11.             this.isEnd = false;
  12.         }
  13.     }
  14.     public Node root;
  15.    
  16.     public Trie(){
  17.         this.root = new Node();
  18.     }
  19.    
  20.     public void insert(String s){
  21.         Node cur = root;
  22.         for(int i=0; i<s.length(); i++){
  23.             int index = (int)s.charAt(i)-'a';
  24.             if(cur.children[index]==null){
  25.                 cur.children[index]=new Node();
  26.             }
  27.             cur.count++;
  28.             cur = cur.children[index];
  29.         }
  30.         cur.count++;
  31.         cur.isEnd=true;
  32.     }
  33.    
  34.     public void printNumStringsWithPref(String p){
  35.         Node cur = root;
  36.         for(int i=0; i<p.length(); i++){
  37.             if(cur ==null){
  38.                 System.out.println(0);
  39.                 return;
  40.             }
  41.             cur = cur.children[p.charAt(i)-'a'];
  42.         }
  43.         if(cur==null){
  44.             System.out.println(0);
  45.             return;
  46.         }
  47.         System.out.println(cur.count);
  48.     }
  49.    
  50.     public boolean isWord(String s){
  51.         Node cur = root;
  52.         for(int i=0; i<s.length(); i++){
  53.             if(cur==null)
  54.                 return false;
  55.             cur = cur.children[s.charAt(i)-'a'];
  56.         }
  57.         if(cur==null)
  58.             return false;
  59.         return cur.isEnd==true;
  60.     }
  61.    
  62.     public String findLongestPrefixWord(String s){
  63.         Node cur = root;
  64.         int index = -1;
  65.         for(int i=0; i<s.length(); i++){
  66.             cur = cur.children[s.charAt(i)-'a'];
  67.             if(cur==null){
  68.                 break;
  69.             }
  70.             if(cur.isEnd){
  71.                 index = i;
  72.                
  73.             }          
  74.         }
  75.         return s.substring(0,index+1);
  76.     }
  77.    
  78.     public void delete(Node n, String s, int index){
  79.         if(index ==s.length())
  80.             return;
  81.         Node child = n.children[s.charAt(index)-'a'];
  82.         if(index ==s.length()-1){
  83.             child.isEnd=false;
  84.         }
  85.        
  86.         delete(child, s, index+1);
  87.         if(child.count==1){
  88.             n.children[s.charAt(index)-'a']=null;
  89.         }
  90.         else{
  91.             child.count--;
  92.         }      
  93.     }
  94.     public static void main(String[] args){
  95.         Trie trie = new Trie();
  96.         trie.insert("hello");
  97.         trie.insert("hey");
  98.         trie.insert("hi");
  99.         trie.insert("app");
  100.         trie.insert("applet");
  101.         trie.insert("bla");
  102.         trie.insert("blabla");
  103.         trie.insert("wtf");
  104.         trie.insert("wth");
  105.         trie.insert("are");
  106.         trie.insert("area");
  107.         trie.insert("base");
  108.         trie.insert("cat");
  109.         trie.insert("cater");        
  110.         trie.insert("basement");
  111.         trie.printNumStringsWithPref("a");
  112.         System.out.println(trie.findLongestPrefixWord("heylohowareyou"));
  113.  
  114.     }
  115.    
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement