8.28 - hard - 114

642. Design Search Autocomplete System

这题要多做几遍,很好的设计题

_trie = lambda: collections.defaultdict(_trie)
INFO, END = True, False

class ShortList(list):
    def append(self, val):
        for i, (nt, s) in enumerate(self):
            if s == val[1]:
                self[i] = val
                break
        else:
            list.append(self, val)
        
        self.sort()
        if len(self) > 3:
            self.pop()

class AutocompleteSystem(object):
    
    def __init__(self, sentences, counts):
        self.curnode = self.trie = _trie()
        self.sentence_to_count = collections.Counter()
        self.search = ''
        
        for sentence, count in zip(sentences, counts):
            self.add(sentence, count)
    
    def add(self, sentence, count):
        self.sentence_to_count[sentence] = count
        cur = self.trie
        self._add_info(cur, sentence, count)
        for letter in sentence:
            cur = cur[letter]
            self._add_info(cur, sentence, count)
        cur[END] = sentence
    
    def _add_info(self, node, sentence, count):
        if INFO not in node:
            node[INFO] = ShortList()
        node[INFO].append((-count, sentence))
        
    def input(self, c):
        if c != '#':
            self.search += c
            if self.curnode is None:
                return []
            if c not in self.curnode:
                self.curnode = None
                return []
            
            self.curnode = self.curnode[c]
            return [s for nt, s in self.curnode[INFO]]
        else:
            self.sentence_to_count[self.search] += 1
            self.add(self.search, self.sentence_to_count[self.search])
            self.search = ''
            self.curnode = self.trie
            return []


# Your AutocompleteSystem object will be instantiated and called as such:
# obj = AutocompleteSystem(sentences, times)
# param_1 = obj.input(c)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 639. Decode Ways II 虽然竞赛时候这道题AC了,不过写的code 狗啃一般,找了一个清爽的答案,...
    健时总向乱中忙阅读 1,009评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,729评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,653评论 18 399
  • 毕业了,幼儿园毕业,小学毕业,中学毕业。人的一生都要经历几次毕业。是伤感的,是满足的,是希望的。 离别充满伤感。 ...
    ai小鹿梅花阅读 1,747评论 0 0
  • 以下内容有的源于相关大神(张亮老师,黄有璨老师)言论,有的源于我自己的理解。 1.如何理解产品不足运营补? 哪些产...
    破晓之后阅读 2,976评论 0 2

友情链接更多精彩内容