LeetCode 2227. 加密解密字符串 的核心在于- 加密 是确定性的每个字符映射到一个固定长度为2的字符串- 解密 是非确定性的一对多但题目只要求统计有多少个字典中的单词能被加密成给定密文。因此高效做法是预处理字典中所有单词的加密结果并用哈希表统计每种密文出现的次数。这样 decrypt(word2) 就变成一次 O(1) 的哈希查找。✅ Python3 实现如下from typing import Listfrom collections import defaultdictclass Encrypter:def init(self, keys: List[str], values: List[str], dictionary: List[str]):# 构建字符 - 密文的映射self.char_to_val {k: v for k, v in zip(keys, values)}# 预先将 dictionary 中每个词加密并统计密文频次self.encrypted_count defaultdict(int)for word in dictionary:encrypted self.encrypt(word)if encrypted ! : # 如果加密成功即word中所有字符都在keys中self.encrypted_count[encrypted] 1def encrypt(self, word1: str) - str:res []for ch in word1:if ch not in self.char_to_val:return # 无法加密返回空字符串res.append(self.char_to_val[ch])return .join(res)def decrypt(self, word2: str) - int:return self.encrypted_count[word2] 示例验证输入encrypter Encrypter(keys[a, b, c, d],values[ei, zf, ei, am],dictionary[abcd, acbd, adbc, badc, dacb, cadb, cbda, abad])print(encrypter.encrypt(abcd)) # 输出: eizfeiamprint(encrypter.decrypt(eizfeiam)) # 输出: 2解释- abcd → ei zf ei am eizfeiam- eizfeiam 解密时- ei 可对应 a 或 c- zf → b- am → d- 所有可能原文包括 abad, cbad, abcd, cbcd 等- 其中只有 abcd 和 abad 在 dictionary 中 → 返回 2⏱️ 复杂度分析- 初始化O(D × L)D dictionary 长度L 平均单词长度- encrypt()O(N)N word1 长度- decrypt()O(1)完全满足题目约束dictionary ≤ 100调用次数 ≤ 200。如需进一步优化或扩展比如支持动态添加字典词可考虑 Trie 回溯但本题无需。此解法简洁高效。