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)
 */

 

posted @ 2021-01-03 16:08  牛有肉  阅读(93)  评论(0编辑  收藏  举报