📅  最后修改于: 2023-12-03 15:28:48.715000             🧑  作者: Mango
这是一道经典的数据结构题目,涉及栈的基本操作和算法。
给定一个只包含 '(',')','{','}','[',']' 六种字符的字符串,判断该字符串是否合法。若字符串中所有左括号都有相应的右括号,则视为合法字符串,否则不合法。
本题可以使用栈来解决。具体思路如下:
初始化一个空栈。
从左到右遍历字符串中的字符。如果当前字符是左括号,则将其压入栈中。
如果当前字符是右括号,则弹出栈顶字符,并判断是否与当前字符匹配。如果不匹配,返回 false。
如果遍历完整个字符串后,栈不为空,则返回 false。
否则,返回 true。
下面是 Python 实现该算法的代码片段:
def isValid(s: str) -> bool:
stack = []
for char in s:
if char in ['(', '[', '{']:
stack.append(char)
else:
if not stack: # 栈为空
return False
top_char = stack.pop()
if char == ')' and top_char != '(':
return False
elif char == ']' and top_char != '[':
return False
elif char == '}' and top_char != '{':
return False
return not stack # 栈为空则返回 True,否则返回 False
本题使用了栈这种经典的数据结构,并且代码的实现比较简单易懂。掌握了栈的基本操作之后,对于这种字符串匹配问题,使用栈是比较容易解决的。