每日一题 676. 实现一个魔法字典(每日一题安全培训内容)

网友投稿 240 2022-08-25


每日一题 676. 实现一个魔法字典(每日一题安全培训内容)

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

实现 MagicDictionary 类:

# 676 实现一个魔法字典 from typing import List class MagicDictionary: # 初始化对象 def __init__(self): pass # 使用字符串数组 dictionary 设定该数据结构,dictionary 中的字符串互不相同 def buildDict(self, dictionary: List[str]) -> None: pass # 给定一个字符串 searchWord ,判定能否只将字符串中 一个 字母换成另一个字母,使得所形成的新字符串能够与字典中的任一字符串匹配。如果可以,返回 true ;否则,返回 false 。 def search(self, searchWord: str) -> bool: pass

解:没有看完题目就开始写了,下面这个版本写得很差,但是可以通过。我用了集合表示拥有的单词,实际上用列表就可以。因为题目保证了初始化列表中不会有重复的单词。另一个地方就是search()方法,写得非常纯真。直接判断长度,长度相同则遍历单词,判断是否有且仅有一个位置的字母不同。

# 676 实现一个魔法字典 from typing import List class MagicDictionary: def __init__(self): self.d = set() def buildDict(self, dictionary: List[str]) -> None: for word in dictionary: self.d.add(word) def search(self, searchWord: str) -> bool: for word in self.d: if len(word) != len(searchWord): continue for index in range(len(searchWord)): if word[0:index] == searchWord[0:index] and word[index]!= searchWord[index] \ and word[index+1:] == searchWord[index+1:]: return True return False

参考官方题解后,做了下面的修改:

用列表保存单词 search()方法使用了zip同时迭代两个单词,比较单词中不同的字母数量。如果刚好有一个字母不同,则返回True。 # 676 实现一个魔法字典 from typing import List

class MagicDictionary:

def __init__(self): self.words = list() def buildDict(self, dictionary: List[str]) -> None: self.words = dictionary def search(self, searchWord: str) -> bool: for word in self.words: if len(word) != len(searchWord): continue diff = 0 for a,b in zip(word,searchWord): if a != b: diff += 1 if diff > 2: break if diff == 1: return True return False


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Celery知识点总结(celery详解)
下一篇:python运行程序出现RSA失败
相关文章

 发表评论

暂时没有评论,来抢沙发吧~