📅  最后修改于: 2023-12-03 15:21:24.640000             🧑  作者: Mango
| |问题 28
是一个常见的算法问题,即:给定一个字符串,判断它是否是有效的括号字符串。这意味着该字符串中括号字符必须按正确的顺序出现,比如 ()``[]``{}
等。具体来说,对于每个左括号,都必须有相应的右括号与之匹配,并且两种类型的括号 {}
, []
, ()
不能交叉使用。
解决这个问题的一种常见方法是使用栈。具体而言,我们可以遍历字符串中的每个字符,如果当前字符是左括号,则将其推入栈中;如果当前字符是右括号,则检查栈顶的左括号是否与之匹配。如果匹配,则出栈,否则字符串不是有效的括号字符串。如果在遍历完整个字符串后,栈中仍有元素,则字符串不是有效的括号字符串。
输入: "()[]{}" 输出: true
输入: "([)]" 输出: false
输入: "{[]}" 输出: true
以下是使用 Python 解决此问题的示例代码:
class Solution:
def isValid(self, s: str) -> bool:
match = {')': '(', '}': '{', ']': '['}
stack = []
for c in s:
if c in match:
if not stack or stack.pop() != match[c]:
return False
else:
stack.append(c)
return not stack
时间复杂度:$O(n)$,其中 $n$ 是字符串的长度。遍历字符串一遍,并在栈上进行 $O(1)$ 的推入和弹出操作。
空间复杂度:$O(n)$。在最坏情况下,栈中可能需要存储所有字符串中的元素。