• 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')
    
    
  • 相关阅读:
    快速求平方根,这个好牛逼
    学一下gconv, gprof等知识
    sigprocmask, sigpending, sigsuspend的用法
    boost::asio与ACE的对比
    类模版静态成员初始化
    C++虚表的原理,很好
    valgrind的说明使用和原理
    reactor与proactor模式
    三种new
    iterator的使用和封个问题
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/12110169.html
Copyright © 2020-2023  润新知