字典树实现拼音九键按照词典的词频进行提示补全算法

class Trieroot():
    def __init__(self):
        self.isEnd = False
        self.next = {}
        self.pre = ""
        self.count = 0
class Trie(object):
    
    def __init__(self):
        self.root = Trieroot()
        
        self.w2i_dict = {}
        
        self.w2i_dict['a'] = 2
        self.w2i_dict['b'] = 2
        self.w2i_dict['c'] = 2
        
        self.w2i_dict['d'] = 3
        self.w2i_dict['e'] = 3
        self.w2i_dict['f'] = 3
        
        self.w2i_dict['g'] = 4
        self.w2i_dict['h'] = 4
        self.w2i_dict['i'] = 4
        
        self.w2i_dict['j'] = 5
        self.w2i_dict['k'] = 5
        self.w2i_dict['l'] = 5

        self.w2i_dict['m'] = 6
        self.w2i_dict['n'] = 6
        self.w2i_dict['o'] = 6

        self.w2i_dict['p'] = 7
        self.w2i_dict['q'] = 7
        self.w2i_dict['r'] = 7
        self.w2i_dict['s'] = 7

        self.w2i_dict['t'] = 8
        self.w2i_dict['u'] = 8
        self.w2i_dict['v'] = 8
    
        self.w2i_dict['w'] = 9
        self.w2i_dict['x'] = 9
        self.w2i_dict['y'] = 9
        self.w2i_dict['z'] = 9

    
    def insert(self,word):
        node = self.root
        for st in word:
            ind = self.w2i_dict[st]
            if ind not in node.next:
                node.next[ind] = Trieroot()
            node = node.next[ind]
        node.isEnd = True
        node.pre = word
        node.count+=1
    
    def startwith(self,inter):
        def show(node):
            if node.isEnd:
                save[node.pre] = node.count 
            for ind in node.next:
                show(node.next[ind])
        node = self.root
        for ind in inter:
            ind = int(ind)
            if ind not in node.next:
                return False
            node = node.next[ind]
        #print(node.pre)
        save = {}
        show(node)
        #print(save)
        print(sorted(save,reverse=True))
算法分析 空间复杂度O(26N) 其中N为最长的单词长度
时间复杂度插入O(N);前缀O(26(N-M)) 其中N为输入长度M为字典中最长单词的长度
全部评论
楼主你这也太牛了
点赞 回复 分享
发布于 2022-10-23 13:10 山西

相关推荐

牛客大王八:考公吧,你这个考公适合
点赞 评论 收藏
分享
11-29 00:55
门头沟学院
区域赛银,邀请赛金,打算十二月打下Java基础、背点八股、写个外卖后去投福建小厂的寒假实习,简历应该怎么写呢?以及福州/和厦门有推荐的小厂吗?
牛客53210502...:简历一页:把区域银,邀请赛金标粗,其他的奖除非凑一页否则没有必要写。或者多页:每个站一行这样都列出来。项目经历看看牛客其他人是怎么写的,写的不好呢。简历打磨好按部就班没问题的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务