📜  门| GATE-CS-2014-(Set-1)|问题25(1)

📅  最后修改于: 2023-12-03 15:12:42.146000             🧑  作者: Mango

题目25

本题是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。