Ruby's Louvre

每天学习一点点算法

导航

leetcode 676. Implement Magic Dictionary

使用Tire 处理

function Node(value) {
      this.word = null
      this.children = {}
    }
    class MagicDictionary {
      constructor() {
        this.root = new Node(null)
      }
      addWord(word) {
        var node = this.root;
        for (var i = 0; i < word.length; i++) {
          var next = word[i]
          if (!node.children[next]) {
            node.children[next] = new Node()
          }
          node = node.children[next]
        }
        node.isEnd = true
      }
      buildDict(words) {
        for (let word of words) {
          this.addWord(word)
        }
      }
      search(word) {
        var v = !!searchInner(this.root, word, 0, 0);
        console.log(v);
        return v
      }
    }

    function searchInner(node, word, index, flag) {
      if (index < word.length) {
        var cur = word[index]
        if (node.children[cur]) {
          if (searchInner(node.children[cur], word, index + 1, flag)) {
            return true
          }
        }
        if (!flag) {
          for (let c in node.children) {
            if (c !== cur && searchInner(node.children[c], word, index + 1, true)) {
              return true
            }
          }
        }
        return false
      }
      return (flag && node.isEnd);
    }



    var tire = new MagicDictionary()
    tire.buildDict(["hello", "leetcode"])
    tire.search('hello')
    tire.search('hhllo')
    tire.search('hell')
    tire.search('leetcoded')


    var tire1 = new MagicDictionary()
    tire1.buildDict(["hello", "hallo", "leetcode"])
    tire1.search('hello')
    tire1.search('hhllo')
    tire1.search('hell')
    tire1.search('leetcodd')

posted on 2019-12-28 00:17  司徒正美  阅读(374)  评论(0编辑  收藏  举报