Leetcode-211. Add and Search Word - Data structure design
一、题目描述
Design a data structure that supports the following two operations:
void addWord(word) bool search(word)
search(word) can search a literal word or a regular expression string containing only letters a-z
or .
. A .
means it can represent any one letter.
Example:
addWord("bad") addWord("dad") addWord("mad") search("pad") -> false search("bad") -> true search(".ad") -> true search("b..") -> true
Note:
You may assume that all words are consist of lowercase letters a-z
.
二、解法,这个题目我用普通方法实现,结果超时了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | class Word: def __init__( self , s): self .s = s def __eq__( self , other): if isinstance (other, Word): if not self .s or not other.s: return self .s = = other.s if len ( self .s) ! = len (other.s): return False for i in range ( len ( self .s)): if self .s[i] ! = other.s[i] and self .s[i] ! = '.' and other.s[i] ! = '.' : return False return True def __str__( self ): return self .s def __hash__( self ): return hash ( str ( self )) class WordDictionary: def __init__( self ): """ Initialize your data structure here. """ self .m = {} def addWord( self , word): """ Adds a word into the data structure. :type word: str :rtype: void """ key = Word(word) if key in self .m: self .m[key] + = 1 else : self .m[key] = 1 def search( self , word): """ Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. :type word: str :rtype: bool """ key = Word(word) if key in self .m: return True for k in self .m: if k = = key: return True return False |
这个题目的本质是字典树,使用字典树才不会超时
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | class WordDictionary: class TrieNode: def __init__( self ): self .isword = False self .child = [ None for i in range ( 26 )] def __init__( self ): """ Initialize your data structure here. """ self .root = WordDictionary.TrieNode() def addWord( self , word): """ Adds a word into the data structure. :type word: str :rtype: void """ p = self .root for c in word: i = ord (c) - ord ( 'a' ) if not p.child[i]: p.child[i] = WordDictionary.TrieNode() p = p.child[i] p.isword = True def search( self , word): """ Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. :type word: str :rtype: bool """ return self .searchNode(word, self .root, 0 ) def searchNode( self , word, node, i): if i = = len (word): return node.isword if word[i] = = '.' : for a in node.child: if a and self .searchNode(word, a, i + 1 ): return True return False else : index = ord (word[i]) - ord ( 'a' ) return node.child[index] ! = None and self .searchNode(word, node.child[index], i + 1 ) |
注意python和C语言的不同
1 2 3 4 5 6 7 | def hello(): x = None return (x and False ) = = None def hello2(): x = None return (x and False ) |
输出
1 2 3 | True None |
分类:
算法相关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架