676. 实现一个魔法字典

exiaohu 于 2022-07-11 发布

题目链接:676. 实现一个魔法字典

使用字典树描述魔法字典的内部存储,在索引时,记录一个状态,来表示是否有一个字母被替换过。

from typing import List


class MagicDictionary:

    def __init__(self):
        self.tire: dict[str, dict] = dict()

    def buildDict(self, dictionary: List[str]) -> None:
        for word in dictionary:
            cur = self.tire
            for ch in word:
                if ch not in cur:
                    cur[ch] = dict()
                cur = cur[ch]
            cur['#'] = dict()

    def search(self, searchWord: str) -> bool:
        def dfs(tire: dict, i: int, replaced: bool) -> bool:
            if i == len(searchWord) - 1:
                if replaced:
                    return searchWord[i] in tire and '#' in tire[searchWord[i]]
                else:
                    return any(c != searchWord[i] and '#' in tire[c] for c in tire.keys())

            if replaced:
                return searchWord[i] in tire and dfs(tire[searchWord[i]], i + 1, True)

            return any(dfs(tire[c], i + 1, c != searchWord[i]) for c in tire.keys())

        return dfs(self.tire, 0, False)