8.28 - hard - 114

642. Design Search Autocomplete System

這題要多做幾遍,很好的設(shè)計題

_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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市彼棍,隨后出現(xiàn)的幾起案子赠摇,更是在濱河造成了極大的恐慌共缕,老刑警劉巖沪斟,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件士飒,死亡現(xiàn)場離奇詭異悔耘,居然都是意外死亡翩蘸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門淮逊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催首,“玉大人,你說我怎么就攤上這事泄鹏±扇危” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵备籽,是天一觀的道長舶治。 經(jīng)常有香客問我,道長车猬,這世上最難降的妖魔是什么霉猛? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮珠闰,結(jié)果婚禮上惜浅,老公的妹妹穿的比我還像新娘。我一直安慰自己伏嗜,他們只是感情好坛悉,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布伐厌。 她就那樣靜靜地躺著,像睡著了一般裸影。 火紅的嫁衣襯著肌膚如雪挣轨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天轩猩,我揣著相機與錄音卷扮,去河邊找鬼。 笑死均践,一個胖子當著我的面吹牛画饥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浊猾,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼抖甘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了葫慎?” 一聲冷哼從身側(cè)響起衔彻,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偷办,沒想到半個月后艰额,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡椒涯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年柄沮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片废岂。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡祖搓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湖苞,到底是詐尸還是另有隱情拯欧,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布财骨,位于F島的核電站镐作,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隆箩。R本人自食惡果不足惜该贾,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捌臊。 院中可真熱鬧杨蛋,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾端。三九已至掏击,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秩铆,已是汗流浹背砚亭。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殴玛,地道東北人捅膘。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像滚粟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 639. Decode Ways II 雖然競賽時候這道題AC了厕妖,不過寫的code 狗啃一般橙喘,找了一個清爽的答案,...
    健時總向亂中忙閱讀 86評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,761評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法亚侠,類相關(guān)的語法曹体,內(nèi)部類的語法,繼承相關(guān)的語法硝烂,異常的語法箕别,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 畢業(yè)了,幼兒園畢業(yè)滞谢,小學畢業(yè)串稀,中學畢業(yè)。人的一生都要經(jīng)歷幾次畢業(yè)狮杨。是傷感的厨诸,是滿足的,是希望的禾酱。 離別充滿傷感微酬。 ...
    ai小鹿梅花閱讀 247評論 0 0
  • 以下內(nèi)容有的源于相關(guān)大神(張亮老師,黃有璨老師)言論颤陶,有的源于我自己的理解颗管。 1.如何理解產(chǎn)品不足運營補? 哪些產(chǎn)...
    破曉之后閱讀 359評論 0 2