📅  最后修改于: 2023-12-03 15:12:37.297000             🧑  作者: Mango
门| GATE CS 2020 |第 60 题
给定一个字符串s
,它由括号'('
和')'
组成。你需要判断这个字符串是否是有效的括号匹配,也就是说:
例如,"(())"
,"()()"
和 ""
都是有效的括号匹配,而 "(())("
,")()("
和 ")("
则不是。
你可以假设输入的字符串只包含'('
和')'
。
以下是函数的定义
def valid_parenthesis(s: str) -> bool:
pass
'('
和')'
的字符串。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
的长度。