LeetCode每日一题——676. 实现一个魔法字典

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

题目

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

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

思路

  • 哈希表+双指针
  • 哈希set中保存buildDict(String[] dictionary)方法中的所有字符串
  • 遍历set中的所有元素,使用双指针(l,r)和一个变量(judge)判断两字符串中有多少位置的元素不同,若judge == 1
  • 则直接返回True, 若比较完set中所有元素还未返回True, 则返回False

题解

class MagicDictionary:
    def __init__(self):
        # 创建哈希set
        self.temp = set()
    def buildDict(self, dictionary: List[str]) -> None:
        # 想哈希set中添加元素
        for i in dictionary:
            self.temp.add(i)
    def search(self, searchWord: str) -> bool:
        for i in self.temp:
            # 预处理,若两字符串长度不一样,直接跳过
            if len(i) != len(searchWord):
                continue
            else:
                # 双指针,判断两字符串有多少位置不同
                l,r, judge = 0, 0, 0
                while l < len(i):
                    # 如果不同的元素大于1了,直接跳过该字符串
                    if judge > 1:
                        break
                    if i[l] != searchWord[r]:
                        judge += 1
                    l += 1
                    r += 1
                # 如果不同的个数等于1, 直接返回
                if judge == 1:
                    return True
        # set中所有元素比较完,无符合条件的, 返回False
        return False
目录
相关文章
|
7月前
|
Go
golang力扣leetcode 386.字典序排数
golang力扣leetcode 386.字典序排数
41 0
|
程序员
【Leetcode】225. 用队列实现栈、232. 用栈实现队列
【Leetcode】225. 用队列实现栈、232. 用栈实现队列
111 0
【Leetcode】225. 用队列实现栈、232. 用栈实现队列
|
存储 前端开发 算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
165 0
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
代码随想录刷题|LeetCode 栈和队列的理论基础 232.用栈实现队列 225. 用队列实现栈
代码随想录刷题|LeetCode 栈和队列的理论基础 232.用栈实现队列 225. 用队列实现栈
代码随想录刷题|LeetCode 栈和队列的理论基础 232.用栈实现队列 225. 用队列实现栈
|
存储 算法 索引
代码随想录刷题|LeetCode KMP算法理论 28. 实现 strStr() 459.重复的子字符串
代码随想录刷题|LeetCode KMP算法理论 28. 实现 strStr() 459.重复的子字符串
代码随想录刷题|LeetCode KMP算法理论 28. 实现 strStr() 459.重复的子字符串
|
Java 程序员 开发者
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
本文是《LeetCode第三题(Longest Substring Without Repeating Characters)三部曲》的第二篇,前一篇文章已经列出了完整的解题思路,今天来将此思路转化为具体的Java代码
104 0
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
leetcode【栈与队列—简单】 225. 用队列实现栈
leetcode【栈与队列—简单】 225. 用队列实现栈
leetcode【栈与队列—简单】 225. 用队列实现栈
leetcode【栈与队列—简单】 232. 栈实现队列
leetcode【栈与队列—简单】 232. 栈实现队列
leetcode【栈与队列—简单】 232. 栈实现队列
leetcode【字符串—简单】28.实现 strStr()
leetcode【字符串—简单】28.实现 strStr()
leetcode【字符串—简单】28.实现 strStr()
|
JavaScript 前端开发 算法
LeetCode 204. 质数计数:JavaScript 实现埃拉托斯特尼筛法
LeetCode 204. 质数计数:JavaScript 实现埃拉托斯特尼筛法
164 0
LeetCode 204. 质数计数:JavaScript 实现埃拉托斯特尼筛法