返回
「前端刷题」20. 有效的括号:开启你的括号校验之旅
前端
2023-09-22 21:05:07
有效括号的校验规则
- 左括号必须用相同类型的右括号闭合。
- 左括号和右括号必须一一对应,不能出现未闭合或多余的括号。
- 不同类型的括号不能互相闭合,例如:左括号不能用右大括号闭合。
算法题解
-
栈数据结构:
- 使用栈来存储左括号,当遇到右括号时,从栈中弹出左括号并进行配对。
- 如果栈为空,则说明右括号没有与之匹配的左括号,字符串无效。
- 如果栈中还有未配对的左括号,则说明字符串无效。
-
双指针法:
- 使用两个指针来遍历字符串,一个指针指向左括号,另一个指针指向右括号。
- 当遇到左括号时,将指针移动到下一个右括号处。
- 当遇到右括号时,将指针移动到上一个左括号处。
- 如果指针相遇或越界,则字符串无效。
-
递归法:
- 将字符串拆分为左右两个子字符串,分别判断子字符串是否有效。
- 如果两个子字符串都有效,则整个字符串有效。
- 如果有一个子字符串无效,则整个字符串无效。
示例代码
def is_valid(s):
"""
判断括号字符串是否有效
Args:
s: 括号字符串
Returns:
布尔值,表示字符串是否有效
"""
# 使用栈来存储左括号
stack = []
# 遍历字符串
for char in s:
# 如果是左括号,则入栈
if char in "([{":
stack.append(char)
# 如果是右括号,则出栈并进行配对
elif char in ")]}":
if not stack:
return False
left = stack.pop()
if (char == ')' and left != '(') or \
(char == ']' and left != '[') or \
(char == '}' and left != '{'):
return False
# 如果栈为空,则字符串有效
return not stack
总结
有效括号的校验是编程面试中常见的一道算法题,需要掌握栈、双指针法或递归法等算法来解决。通过本文的讲解和示例代码,希望你能够深入理解有效括号的校验规则和算法实现,从而在面试或算法竞赛中轻松应对这类题目。