zoukankan      html  css  js  c++  java
  • b_nk_实现Trie树(用数组记录孩子结点)

    实现一个 Trie (前缀树),包含 insert, delete, isExist, 和 prefixCount 这四个操作。

    class Node:
        def __init__(self, val) -> None:
            self.child=[None for i in range(26)]
            self.isEnd=False
            self.val=val
            self.cnt=0 #以结点val为尾巴的路径数
    class Trie:
        def __init__(self) -> None:
            self.root=Node('/')
        """
        添加word
        """
        def insert(self, word: str) -> None:
            cur=self.root
            for c in word:
                u=ord(c)-ord('a')
                if not cur.child[u]:
                    cur.child[u]=Node(c)
                cur=cur.child[u]
                cur.cnt+=1
            cur.isEnd=True
        """
        删除word
        """
        def delete(self, word: str) -> None:
            cur=self.root
            for c in word:
                u=ord(c)-ord('a')
                if not cur.child[u] or cur.child[u].cnt==0: 
                    cur.child[u]=None
                    return
                cur.child[u].cnt-=1
                cur=cur.child[u]
            cur.isEnd=False
        """
        查询word是否在字典树中
        """
        def isExist(self, word: str) -> str:
            cur=self.root
            for c in word:
                u=ord(c)-ord('a')
                if not cur.child[u]:
                    return "NO"
                cur=cur.child[u]
            return "YES" if cur.isEnd else "NO"
        """
        返回以word为前缀的单词数量
        """
        def prefixCount(self, word: str) -> int:
            cur=self.root
            for c in word:
                u=ord(c)-ord('a')
                if not cur.child[u]: return 0
                cur=cur.child[u]
            return cur.cnt
        
    class Solution:
        def trieU(self , ops ):
            trie,ans=Trie(),[]
            for op in ops:
                if op[0]=="1":   #添加
                    trie.insert(op[1])
                elif op[0]=="2": #删除
                    trie.delete(op[1])
                elif op[0]=="3": #查询是否存在
                    ans.append(trie.isExist(op[1]))
                else:            #返回以op[1]开头的单词的数量
                    ans.append(str(trie.prefixCount(op[1])))
            return ans
    
  • 相关阅读:
    Asp中JSON的使用
    POJ 3243 Clever Y Extended-Baby-Step-Giant-Step
    [Java开发之路](16)学习log4j日志
    【剑指Offer学习】【面试题49:把字符串转换成整数】
    负载均衡器&http正向代理
    Android应用开发经常使用知识
    java8_api_nio
    李洪强经典面试题25(选择题)
    李洪强经典面试题24
    李洪强经典面试题23
  • 原文地址:https://www.cnblogs.com/wdt1/p/14092212.html
Copyright © 2011-2022 走看看