LeetCode.676.实现一个魔法字典

题目描述:

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

实现 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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值