惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
B
Blog
L
LangChain Blog
Y
Y Combinator Blog
美团技术团队
博客园 - 三生石上(FineUI控件)
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
量子位
博客园_首页
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
Check Point Blog
D
Docker
小众软件
小众软件
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
IT之家
IT之家

博客园 - 司徒正美

leetcode 91. Decode Ways leetcode 1214 Two Sum BSTs leetcode 213 House Robber II leetcode 198 House Robber I leetcode 986. Interval List Intersections leetcode 869. Reordered Power of 2 leetcode 925. Long Pressed Name leetcode 457. Circular Array Loop leetcode 1093. Statistics from a Large Sample leetcode 881. Boats to Save People leetcode 977. Squares of a Sorted Array leetcode 844. Backspace String Compare leetcode 1032. Stream of Characters leetcode 1023. Camelcase Matching leetcode 720. Longest Word in Dictionary leetcode 692. Top K Frequent Words leetcode 677. Map Sum Pairs leetcode 676. Implement Magic Dictionary leetcode 648. Replace Words
leetcode 745 Prefix and Suffix Search
司徒正美 · 2019-12-29 · via 博客园 - 司徒正美
 
    var WordFilter = function (words) {
      this.trie = {}, idx = 0;
      for (let word of words) {
        let m = word.length;
        let paths = [];
        for (let i = 0; i <= m; i++) {
          this.buildTrie(word.substr(m - i, m) + '_' + word, idx);
        }
        idx++
      }
    };


    WordFilter.prototype.buildTrie = function (str, weight) {
      console.log(str)
      let trie = this.trie;
      let flag = false;
      for (let path of str) {
        if (!trie[path]) {
          trie[path] = {}
        }
        if (path === '_') flag = true;
        trie = trie[path];
        trie.weight = flag ? weight : trie.weight;
      }
    }

    /** 
     * @param {string} prefix 
     * @param {string} suffix
     * @return {number}
     */
    WordFilter.prototype.f = function (prefix, suffix) {
      let paths = suffix + '_' + prefix;
      let trie = this.trie;
      for (let path of paths) {
        if (!trie[path]) return -1;
        trie = trie[path];
      }
      return trie.weight;
    };


    var trie = new WordFilter(['apple']);
    console.log(trie.f("a", "e"))// returns 0
    console.log(trie.f("b", ""))
    console.log(trie.f("ap", "le"))