2026-01-06 22:19:43 +0300 MSK
Encrypt and Decrypt Strings
Links
Code
class Encrypter:
def __init__(self, keys: List[str], values: List[str], dictionary: List[str]):
self.key_to_i = {}
self.keys = keys
self.values = values
self.value_to_i = collections.defaultdict(list)
for i, key in enumerate(keys):
self.key_to_i[key] = i
for i, value in enumerate(values):
self.value_to_i[value].append(i)
self.trie = {}
for word in dictionary:
trie = self.trie
for char in word:
if char not in trie:
trie[char] = {}
trie = trie[char]
trie[""] = True
def encrypt(self, word1: str) -> str:
res = []
for char in word1:
if char not in self.key_to_i:
return ""
res.append(self.values[self.key_to_i[char]])
return "".join(res)
def decrypt(self, word2: str) -> int:
def backtrack(i: int, trie: dict[str, dict]) -> int:
if i >= len(word2):
if trie.get(""):
return 1
return 0
res = 0
for idx in self.value_to_i[word2[i:i+ 2]]:
key = self.keys[idx]
if key in trie:
res += backtrack(i + 2, trie[key])
return res
return backtrack(0, self.trie)
# Your Encrypter object will be instantiated and called as such:
# obj = Encrypter(keys, values, dictionary)
# param_1 = obj.encrypt(word1)
# param_2 = obj.decrypt(word2)