题目描述:
设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。
实现 MagicDictionary
类:
MagicDictionary()
初始化对象void buildDict(String[] dictionary)
使用字符串数组dictionary
设定该数据结构,dictionary
中的字符串互不相同bool search(String searchWord)
给定一个字符串searchWord
,判定能否只将字符串中 一个 字母换成另一个字母,使得所形成的新字符串能够与字典中的任一字符串匹配。如果可以,返回true
;否则,返回false
输入输出实例:
思路:我们先对类初始化,在__init__中初始化列表为空,然后在buildDict中将输入的词典元素存入。在search中开始找当前的单词是否满足改一个字母就在词典中即可。
判断当前单词是否在词典中的方法:遍历词典中的所有元素,如果当前词典元素与当前的单词长度不同我们之间跳过这层循环开始找下一个词典元素比;如果两者长度相同我们来找他们有几个不同的字母,使用judge变量来表示二者有几个字母不同,初始值为0。使用zip函数取当前词典元素和当前单词的每一个字母进行逐个对比,如果字母不同我们judge的值就加一,judge的值超过一我们就结束当前循环找下一个词典元素,如果对比完这两个单词后judge=1,就说明改完一个字母可以在词典中找到,返回True,否则False。
根据上述思路有以下代码:
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
#judge用来表示两个单词的差别字母个数
judge = 0
#使用zip来对word和searchWord的每一个字母操作
for i, j in zip(word, searchWord):
#当前字母不相同judge+1
if i != j:
judge += 1
if judge > 1:
break
if judge == 1:
return True
return False
# Your MagicDictionary object will be instantiated and called as such:
# obj = MagicDictionary()
# obj.buildDict(dictionary)
# param_2 = obj.search(searchWord)