📜  门| GATE CS 2020 |第 60 题(1)

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

题目

门| GATE CS 2020 |第 60 题

题目描述

给定一个字符串s,它由括号'('')'组成。你需要判断这个字符串是否是有效的括号匹配,也就是说:

  • 开括号必须由对应的闭括号成对出现,且括号的顺序必须正确。

例如,"(())""()()""" 都是有效的括号匹配,而 "(())("")()("")(" 则不是。

你可以假设输入的字符串只包含'('')'

函数定义

以下是函数的定义

def valid_parenthesis(s: str) -> bool:
    pass
参数说明
  • s: 一个只包含'('')'的字符串。
返回值
  • 如果s为有效的括号匹配,则返回True,否则返回False
举个例子
print(valid_parenthesis("(())")) # Output: True
print(valid_parenthesis("()()")) # Output: True
print(valid_parenthesis("")) # Output: True
print(valid_parenthesis("(())(")) # Output: False
print(valid_parenthesis(")()(")) # Output: False
解题思路

为了检查给定字符串是否为有效的括号匹配,我们可以使用栈数据结构。我们遍历给定的字符串,每次遇到一个开括号'('就将其压入栈中,每次遇到一个闭括号')'时就从栈中弹出一个开括号'(',如果栈为空或栈顶元素不是开括号'(',则返回False,否则继续遍历。遍历结束后,我们需要检查栈是否为空,如果栈不为空,则表示存在开括号没有闭括号与之匹配,返回False,否则返回True

下面是该算法的Python实现

def valid_parenthesis(s: str) -> bool:
    stack = []
    for c in s:
        if c == '(':
            stack.append(c)
        elif c == ')':
            if not stack or stack.pop() != '(':
                return False
    return not stack
时间复杂度

上述算法遍历了字符串中的每个字符,时间复杂度为O(n),其中n为字符串s的长度。

空间复杂度

该算法使用了一个栈来存储开括号,因此空间复杂度最坏情况下为O(n),其中n为字符串s的长度。