返回
有效括号字符串的判定逻辑与实现
前端
2023-12-29 23:36:43
输入:
678. 有效的括号字符串|刷题打卡
参考:
给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
- 任何左括号 ( 必须有相应的右括号 )。
- 任何右括号 ) 必须有相应的左括号 ( 。
- 左括号 ( 必须在对应的右括号之前 )。
-
- 可以被视为单个右括号 ) …
输出:
括号字符串的有效性判定是程序设计中常见的问题之一。有效括号字符串是指由左括号 (、右括号 ) 和通配符 * 构成的字符串,且满足以下规则:
- 任何左括号 ( 必须有相应的右括号 )。
- 任何右括号 ) 必须有相应的左括号 ( 。
- 左括号 ( 必须在对应的右括号之前 )。
- 通配符 * 可以被视为单个右括号 )。
例如,以下字符串是有效的括号字符串:
- "(())"
- "(*)("
- "()"
以下字符串是无效的括号字符串:
- "(()"
- "))"
- ")(*"
为了判定一个括号字符串是否有效,我们可以使用栈数据结构。栈是一种先进后出的数据结构,这意味着后放入栈中的元素将首先被弹出。我们可以将左括号 ( 和通配符 * 压入栈中,当遇到右括号 ) 时,我们将栈顶元素弹出。如果栈顶元素是左括号 (,则括号匹配成功;如果栈顶元素是通配符 *,则通配符可以被视为右括号 ),括号匹配也成功。如果栈为空,则字符串中的所有括号都已匹配成功。
下面是使用栈数据结构判定有效括号字符串的代码示例:
def is_valid_parentheses(s):
"""
判定一个括号字符串是否有效。
Args:
s: 要判定的括号字符串。
Returns:
如果字符串有效,返回 True,否则返回 False。
"""
stack = []
for char in s:
if char == '(' or char == '*':
stack.append(char)
elif char == ')':
if not stack:
return False
top = stack.pop()
if top != '(' and top != '*':
return False
return not stack
在上面的代码中,我们首先创建一个空栈。然后,我们遍历字符串中的每个字符。如果当前字符是左括号 ( 或通配符 *,则将其压入栈中。如果当前字符是右括号 ),则我们将栈顶元素弹出。如果栈顶元素是左括号 (,则括号匹配成功;如果栈顶元素是通配符 *,则通配符可以被视为右括号 ),括号匹配也成功。如果栈为空,则字符串中的所有括号都已匹配成功。最后,我们检查栈是否为空。如果栈为空,则字符串是有效的,否则字符串无效。
总结
本文介绍了有效括号字符串的判定逻辑与实现。重点讲解了使用栈数据结构解决有效括号字符串判定问题。同时给出了代码示例和详细的解释,帮助读者理解有效括号字符串的判定逻辑。