【python3】leetcode 676. 实现一个魔法字典
创始人
2024-05-03 11:54:33
0

题目描述:

设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。
实现 MagicDictionary 类:

  • MagicDictionary() 初始化对象
  • void buildDict(String[] dictionary) 使用字符串数组
  • dictionary 设定该数据结构,
  • dictionary 中的字符串互不相同
  • bool search(String searchWord) 给定一个字符串searchWord,判定能否只将字符串中一个字母换成另一个字母,使得所形成的新字符串能够与字典中的任一字符串匹配。如果可以,返回true;否则,返回false 。

示例:

  • 输入
    [“MagicDictionary”, “buildDict”, “search”, “search”, “search”, “search”][[], [[“hello”, “leetcode”]], [“hello”], [“hhllo”], [“hell”], [“leetcoded”]]输出[null, null, false, true, false, false]
  • 解释
    MagicDictionary magicDictionary = new MagicDictionary();magicDictionary.buildDict([“hello”, “leetcode”]);magicDictionary.search(“hello”); // 返回 FalsemagicDictionary.search(“hhllo”); // 将第二个 ‘h’ 替换为 ‘e’ 可以匹配 “hello” ,所以返回 TruemagicDictionary.search(“hell”); // 返回 FalsemagicDictionary.search(“leetcoded”); // 返回 False

题目解析

这个题目是个纸老虎,看着挺复杂,其实非常简单,个人感觉写成中等难度在于读题花时间。 题目其他都没有什么主要实现在于search这个函数,主要判断输入参数searchWord是否跟已有字典中的字符串只差一个。这么理解就可以直接写代码了。
首先初始化一个空列表dict_list用来保存魔法字典。buidDict把dict_list填充。search函数的实现主要包含以下几个步骤:

  • 遍历dict_list中的每个word
  • 判断searchWord的长度与每个word是否相同,相同则继续,不同直接跳过
  • 判断searchWord与每个word的不同字符个数,超过1的直接跳过
    代码自然而然如下:
class MagicDictionary:def __init__(self):#构建一个dictself.dict_list=[]def buildDict(self, dictionary: List[str]) -> None:if dictionary:self.dict_list=dictionarydef search(self, searchWord: str) -> bool:#n=len(searchWord)#遍历dic_listfor sub_word in self.dict_list:if len(sub_word)==n:#长度必须相等不相等直接跳过count=0for chx,chy in zip(sub_word,searchWord):#统计不同字符个数if chx!=chy :count+=1#不同字符数超过1直接跳过if count>1:break#最后不同字符等于1返回True其他返回Falseif count==1:return Truereturn False  

计算复杂度

这里假设dic_list的长度为n,每个字符串的长度假定为l,个人感觉进度次数可以不考虑。时间复杂度为O(nl)O(nl)O(nl),空间复杂度也为O(nl)O(nl)O(nl)。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...