zoukankan      html  css  js  c++  java
  • Leetcode 208 实现 Trie

      JAVA 实现:

    class Trie {
            private Node head;
    
            /**
             * Initialize your data structure here.
             */
            public Trie() {
                this.head = new Node();
            }
    
            /**
             * Inserts a word into the trie.
             */
            public void insert(String word) {
                Node node = head;
                for (int i = 0; i < word.length(); i++) {
                    int point = word.charAt(i) - 'a';
                    if (node.childs[point] == null) node.childs[point] = new Node();
                    else node.childs[point].num++;
                    node = node.childs[point];
                }
                node.isEnd = true;
            }
    
            /**
             * Returns if the word is in the trie.
             */
            public boolean search(String word) {
                Node node = searchLast(word);
                if (node == null) return false;
                return node.isEnd;
            }
    
            private Node searchLast(String word) {
                Node node = head;
                for (int i = 0; i < word.length(); i++) {
                    int point = word.charAt(i) - 'a';
                    if (node.childs[point] == null) return null;
                    node = node.childs[point];
                }
                return node;
            }
    
            /**
             * Returns if there is any word in the trie that starts with the given prefix.
             */
            public boolean startsWith(String prefix) {
                Node node = searchLast(prefix);
                return node == null ? false : true;
            }
    
            private class Node {
                int num;
                boolean isEnd;
                Node[] childs;
    
                Node() {
                    this.num = 1;
                    this.isEnd = false;
                    this.childs = new Node[26];
                }
            }
        }

      JS 实现:

    /**
     * Initialize your data structure here.
     */
    var Trie = function () {
        this.head = new Node();
    };
    
    var Node = function () {
        this.isEnd = false;
        this.childs = new Array(26);
        this.nums = 1;
    }
    
    /**
     * Inserts a word into the trie.
     * @param {string} word
     * @return {void}
     */
    Trie.prototype.insert = function (word) {
        let node = this.head;
        for (let i = 0; i < word.length; i++) {
            let ch = word.charAt(i), chPoint = ch.charCodeAt() - 97;
            if (!node.childs[chPoint]) node.childs[chPoint] = new Node();
            else node.childs[chPoint].nums++;
            node = node.childs[chPoint];
        }
        node.isEnd = true;
    };
    
    /**
     * Returns if the word is in the trie.
     * @param {string} word
     * @return {boolean}
     */
    Trie.prototype.search = function (word) {
        let node = this.searchLast(word);
        if (!node) return false;
        return node.isEnd;
    };
    
    Trie.prototype.searchLast = function (word) {
        let node = this.head;
        for (let i = 0; i < word.length; i++) {
            let ch = word.charAt(i), chPoint = ch.charCodeAt() - 97;
            if (!node.childs[chPoint]) return null;
            node = node.childs[chPoint];
        }
        return node;
    }
    
    /**
     * Returns if there is any word in the trie that starts with the given prefix.
     * @param {string} prefix
     * @return {boolean}
     */
    Trie.prototype.startsWith = function (prefix) {
        let node = this.searchLast(prefix);
        return !node ? false : true;
    };
    
    /**
     * Your Trie object will be instantiated and called as such:
     * var obj = new Trie()
     * obj.insert(word)
     * var param_2 = obj.search(word)
     * var param_3 = obj.startsWith(prefix)
     */

  • 相关阅读:
    备战noip week1
    20200820校测
    UVA 11419 SAM I AM
    需求沟通技巧
    ReentrantLock和ReentrantReadWriteLock对比
    线程池浅析
    常用设计模式之单例模式
    java开发3~5年工作经验面试题
    2019计划
    Linux系统安装Tomcat
  • 原文地址:https://www.cnblogs.com/niuyourou/p/14225823.html
Copyright © 2011-2022 走看看