Trie 树算法模板

  • Trie 树算法模板
  • 代码
    public int solution(String word, List<String> forbidden) {
        // 初始化
        root = new TreeNode();
        
		return 0;
    }


    class TreeNode{
        Map<Character,TreeNode> map;
        // 使用 map.get.isEnd 判断是否结尾
        boolean isEnd;
        public TreeNode(){
            map = new HashMap<>();
        }
    }

    TreeNode root;

    /**
     * 将 word 存入字典树
     * @param word
     */
    public void insert(String word) {
        TreeNode node = root;
        for(int i = 0;i < word.length();++i){
            char index = word.charAt(i);
            if(!node.map.containsKey(index)){
                node.map.put(index,new TreeNode());
            }
            node = node.map.get(index);
        }
        node.isEnd = true;
    }

    /**
     * 返回 word 匹配到 Trie 树的最短长度
     */
    public int searchMinNum(String word) {
        TreeNode node = root;
        for(int i = 0;i < word.length();++i){
            char index = word.charAt(i);
            if(!node.map.containsKey(index)){
                return -1;
            }
            node = node.map.get(index);

            // 中途存在直接返回长度(node 匹配 index 后 next 过了)
            if (node.isEnd) {
                return i + 1;
            }
        }
        // node 匹配 index 后 next 过了
        return node.isEnd == true ? word.length() : -1;
    }

你可能感兴趣的:(算法模板,算法,Trie)