设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。
实现 MagicDictionary 类:
这个题目是个纸老虎,看着挺复杂,其实非常简单,个人感觉写成中等难度在于读题花时间。 题目其他都没有什么主要实现在于search这个函数,主要判断输入参数searchWord是否跟已有字典中的字符串只差一个。这么理解就可以直接写代码了。
首先初始化一个空列表dict_list用来保存魔法字典。buidDict把dict_list填充。search函数的实现主要包含以下几个步骤:
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)。