Trie字典树(不限于26个英文字母)

牺牲了速度,使用Map替代数组,可以不局限于英文字母

 public class Trie {
        class TrieNode {
            int end;
            HashMap<Character, TrieNode> hashMap;

            public TrieNode() {
                end = 0;
                hashMap = new HashMap<>();
            }
        }

        TrieNode root;

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

        public void insert(String s) {
            char[] chars = s.toCharArray();
            TrieNode temp = root;
            for (char aChar : chars) {
                if (!temp.hashMap.containsKey(aChar)) {
                    temp.hashMap.put(aChar, new TrieNode());
                }
                temp = temp.hashMap.get(aChar);
            }
            temp.end++;
        }

        public boolean search(String s) {
            if(s == null || s.equals("")) return false;
            char[] chars = s.toCharArray();
            TrieNode temp = root;
            for (char aChar : chars) {
                if (!temp.hashMap.containsKey(aChar)) {
                    return false;
                }
                temp = temp.hashMap.get(aChar);
            }
            if (temp.end >= 1) {
                return true;
            }
            return false;
        }


        public boolean startsWith(String s) {
            if(s == null || s.equals("")) return false;
            char[] chars = s.toCharArray();
            TrieNode temp = root;
            for (char aChar : chars) {
                if (!temp.hashMap.containsKey(aChar)) {
                    return false;
                }
                temp = temp.hashMap.get(aChar);
            }
            return true;
        }
    }

你可能感兴趣的:(备战蓝桥)