📅  最后修改于: 2023-12-03 15:12:42.146000             🧑  作者: Mango
本题是Gate CS 2014年第一套试卷的第25道题目。
给定一个字符串S
,使用栈,判断S
是否是有效的括号序列。以下是括号的定义:
(
, )
[
, ]
{
, }
一个有效的括号序列是指:
(
, [
, {
),必须有一个右括号()
, ]
, }
)与之匹配{}
是有效的,但 }{
是无效的)S = "{[()]}"
True
S = "{[))}"
False
使用栈进行遍历字符串。每当遇到左括号时,将其入栈。当遇到右括号时,将栈顶的左括号匹配,如果匹配成功,将其从栈中弹出。如果所有括号都能匹配,最终栈为空。
以下是Python代码的实现:
def isValid(S):
stack = []
for char in S:
if char == '(' or char == '[' or char == '{':
stack.append(char)
else:
if not stack:
return False
if char == ')' and stack[-1] != '(':
return False
if char == ']' and stack[-1] != '[':
return False
if char == '}' and stack[-1] != '{':
return False
stack.pop()
return not stack
代码首先定义一个空栈,并遍历字符串。对于每个字符,如果是左括号,则将其推入栈中。否则,如果栈为空,则表明右括号没有对应的左括号,返回False。如果栈非空,则检查栈顶的左括号是否与当前右括号相匹配。如果匹配失败,返回False。如果匹配成功,将栈顶元素弹出。最后,如果栈为空,则表明所有括号都被匹配,返回True。否则,返回False。