替换字符串中的括号内容

原题指路

替换字符串中的括号内容

题目描述
给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。

比方说,字符串 “(name)is(age)yearsold” 中,有 两个 括号对,分别包含键 “name” 和 “age” 。
你知道许多键对应的值,这些关系由二维字符串数组 knowledge 表示,其中 knowledge[i] = [keyi, valuei] ,表示键 keyi 对应的值为 valuei 。
你需要替换 所有 的括号对。当你替换一个括号对,且它包含的键为 keyi 时,你需要:

将 keyi 和括号用对应的值 valuei 替换。
如果从 knowledge 中无法得知某个键对应的值,你需要将 keyi 和括号用问号 “?” 替换(不需要引号)。
knowledge 中每个键*多只会出现一次。s 中不会有嵌套的括号。
请你返回替换 所有 括号对后的结果字符串。

解题思路%title插图%num

其实这道题可能本意是自己建个哈希表来加速查找(因为*次暴力没过QAQ),但是……我偷懒直接建了个字典来查找,四舍五入也就是用的哈希……

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

代码
class Solution:
def evaluate(self, s: str, knowledge: list[list[str]]) -> str:
res = []
flag = 0
dict = {}
for k in knowledge:
dict[k[0]] = k[1]
for i, ch in enumerate(s):
if flag:
if ch == ‘)’:
flag = 0
keykey = “”.join(key)
if keykey in dict.keys():
res.append(dict[keykey])
else:
res.append(“?”)
else:
key.append(ch)
elif ch == ‘(‘:
flag = 1
key = []
else:
res.append(ch)
return “”.join(res)