1. 程式人生 > 實用技巧 >Leetcode 208 實現 Trie

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