Java HashMap 实现字典树

import java.util.*;


public class Solution {
    public String[] trieU (String[][] operators) {
        // write code here
        String[] res = new String[0];
        if(operators==null||operators.length==0) return res;
        int len = 0;
        for(String[] op : operators){
            if(op[0].equals("3")||op[0].equals("4")) len++;
        }
        res = new String[len];
        Trie trie = new Trie();
        int index = 0;

        for(String[] op : operators){
            switch(op[0]){
                case "1":
                    trie.insert(op[1]);
                    break;
                case "2":
                    trie.delete(op[1]);
                    break;
                case "3":
                    res[index++] = trie.find(op[1])? "YES":"NO";
                    break;
                case "4":
                    String num = String.valueOf(trie.prefix(op[1]));
                    res[index++] = num;
                    break;
                default:
            }

        }
        return res;
    }
}

class TrieNode{
    Map<Character, TrieNode> map;
    boolean isEnd;
    int preCount;

    public TrieNode(){
        this.map = new HashMap();
        this.isEnd = false;
        this.preCount = 0;
    }
}

class Trie{
    TrieNode root;
    public Trie(){
        this.root = new TrieNode();
    }

    public void insert(String str){
        TrieNode cur = root;
        for(char c : str.toCharArray()){
            if(!cur.map.containsKey(c)) cur.map.put(c, new TrieNode());
            cur = cur.map.get(c);
            cur.preCount++;
        }
        cur.isEnd = true;
    }

    public boolean find(String str){
        TrieNode cur = root;
        for(char c : str.toCharArray()){
            if(!cur.map.containsKey(c)) return false;
            cur = cur.map.get(c);
        }
        return cur.isEnd;
    }

    public void delete(String str){
        if(!find(str)) return;
        TrieNode cur = root;
        for(char c : str.toCharArray()){
            cur = cur.map.get(c);
            cur.preCount--;
        }
        if(cur.preCount==0) cur.isEnd=false;
    }

    public int prefix(String str){
        TrieNode cur = root;
        for(char c : str.toCharArray()){
            if(!cur.map.containsKey(c)) return 0;
            cur = cur.map.get(c);
        }
        return cur.preCount;
    }
}