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

推荐订阅源

L
LangChain Blog
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
MyScale Blog
MyScale Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
Vercel News
Vercel News
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG

博客园 - 司徒正美

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"))