原题指路
题目描述
给你一个字符串 s
,它包含一些括号对,每个括号中包含一个 非空 的键。
- 比方说,字符串
"(name)is(age)yearsold"
中,有 两个 括号对,分别包含键 "name"
和"age"
。
你知道许多键对应的值,这些关系由二维字符串数组knowledge
表示,其中knowledge[i] = [keyi, valuei]
,表示键keyi
对应的值为valuei
。
你需要替换 所有 的括号对。当你替换一个括号对,且它包含的键为 keyi 时,你需要:
- 将
keyi
和括号用对应的值valuei
替换。 - 如果从
knowledge
中无法得知某个键对应的值,你需要将keyi
和括号用问号"?"
替换(不需要引号)。
knowledge
中每个键最多只会出现一次。s
中不会有嵌套的括号。
请你返回替换 所有 括号对后的结果字符串。
解题思路
其实这道题可能本意是自己建个哈希表来加速查找(因为第一次暴力没过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)