算法:魔法字典

1️⃣要求:

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

实现 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"); // 返回 False
magicDictionary.search("hhllo"); // 将第二个 'h' 替换为 'e' 可以匹配 "hello" ,所以返回 True
magicDictionary.search("hell"); // 返回 False
magicDictionary.search("leetcoded"); // 返回 False

提示:

  • 1 <= dictionary.length <= 100
  • 1 <= dictionary[i].length <= 100
  • dictionary[i] 仅由小写英文字母组成
  • dictionary 中的所有字符串 互不相同
  • 1 <= searchWord.length <= 100
  • searchWord 仅由小写英文字母组成
  • buildDict 仅在 search 之前调用一次
  • 最多调用 100 次 search

2️⃣个人算法思路:

先建立一个列表将所有的库存单词存入。

1.用户输入一个Search单词,我们需要针对每一个库存单词进行识别

2.对于每一次单词识别,单词长度不一样的直接跳过

3.接下来逐个字母扫描,如果有不一样的字母diffWords计数+1

4.如果扫描完一个库存单词后diffWords=1就为目标单词,返回True。

5.如果diffWords!=1证明有两个及以上字母不同,则继续扫描下一个单词

6.如果全部扫描完后,不满足True的条件的即为False

Python代码具体实现:

python 复制代码
class MagicDictionary(object):

    def __init__(self):
        self.WordList = []

    def buildDict(self, dictionary):
        for word in dictionary:
            self.WordList.append(word)

    def search(self, searchWord):
        for word in self.WordList:
            if len(word) != len(searchWord): continue
            diffWords = 0
            for i in range(len(word)):
                if word[i] != searchWord[i]:
                    if diffWords == 0:
                        diffWords += 1
                    else:
                        diffWords += 1
                        break
            if diffWords == 1: return True
        return False


if __name__ == '__main__':
    obj = MagicDictionary()
    obj.buildDict(["hello","hillo", "hivee", "leetcode"])
    param_2 = obj.search("hello")
    param_3 = obj.search("hallo")
    param_4 = obj.search("hallo0")
    param_5 = obj.search("leescode")
    param_6 = obj.search("hivea")
    param_7 = obj.search("judge")
    param_8 = obj.search("aaaaa")
    print(param_2)
    print(param_3)
    print(param_4)
    print(param_5)
    print(param_6)
    print(param_7)
    print(param_8)

测试结果:

相关推荐
♡すぎ♡5 分钟前
SWE 的原理解析
算法·计算机图形学·swe
AiNightVision8 分钟前
星光级 是什么?——星光级摄像机是什么?0.001Lux 照度门槛与选型真相
人工智能·算法·车载系统·自动驾驶·无人机·视频·智能硬件
若亦_16 分钟前
排序>>选择排序
数据结构·算法·排序算法
重生之小比特20 分钟前
【算法拾光】前缀和|一维前缀和 + 二维前缀和
数据结构·算法
weixin_4404016931 分钟前
大数据技术-数据分析(EXcel+Python数据处理+SQL)
大数据·python·数据分析·excel
甜到心里的蛋糕38 分钟前
AI 生成 MV 音频异响排查:频谱定位、片段替换与 Nginx 缓存
人工智能·python·nginx·ffmpeg·音视频·音频处理
释厄62339 分钟前
矢量词汇向下不向上公理即词汇归位定律——肤浅即表面
java·人工智能·算法·去中心化·1024程序员节
海绵宝宝转agent1 小时前
Leetcode100+面经
java·笔记·学习·算法·leetcode·深度优先
2601_967980111 小时前
python中的静态方法和类方法
python·静态方法·类方法·实例化·方法调用
Shaoshing1 小时前
LeetCode100 283.移动零
java·数据结构·算法·leetcode