返回
栈的妙用:轻松搞定括号匹配问题
前端
2024-01-22 00:29:01
一、栈的数据结构
栈是一种后进先出(Last In First Out, LIFO)的数据结构,这意味着最后加入栈中的元素将第一个被移除。栈的实现方式有很多种,但最常见的是使用数组或链表。
- 数组实现的栈:
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def is_empty(self):
return self.items == []
- 链表实现的栈:
class StackNode:
def __init__(self, data):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.head = None
def push(self, item):
new_node = StackNode(item)
new_node.next = self.head
self.head = new_node
def pop(self):
if self.head is None:
return None
item = self.head.data
self.head = self.head.next
return item
def peek(self):
if self.head is None:
return None
return self.head.data
def is_empty(self):
return self.head is None
二、利用栈解决括号匹配问题
括号匹配问题是计算机科学中的一个经典问题。给定一个字符串,其中包含括号(圆括号、方括号和大括号),判断这些括号是否匹配。例如,字符串 "()" 是有效的,因为括号匹配;而字符串 "([)]" 是无效的,因为括号不匹配。
我们可以利用栈来解决括号匹配问题。算法的思路如下:
- 初始化一个栈。
- 遍历字符串中的每个字符。
- 如果遇到左括号,则将其压入栈中。
- 如果遇到右括号,则检查栈顶元素是否与当前右括号匹配。如果匹配,则将栈顶元素弹出;如果不匹配,则说明括号不匹配。
- 重复步骤 2 和步骤 3,直到遍历完整个字符串。
- 如果栈为空,则说明括号匹配;否则,说明括号不匹配。
下面是利用栈解决括号匹配问题的 Python 代码:
def is_valid_parentheses(s):
"""
判断括号是否匹配。
参数:
s (str): 输入的字符串。
返回:
bool: 括号是否匹配。
"""
# 初始化栈
stack = []
# 遍历字符串中的每个字符
for char in s:
# 如果遇到左括号,则将其压入栈中
if char in "([{":
stack.append(char)
# 如果遇到右括号,则检查栈顶元素是否与当前右括号匹配
elif char in ")]}":
# 如果匹配,则将栈顶元素弹出
if char == ")" and stack[-1] == "(":
stack.pop()
elif char == "]" and stack[-1] == "[":
stack.pop()
elif char == "}" and stack[-1] == "{":
stack.pop()
# 如果不匹配,则说明括号不匹配
else:
return False
# 如果栈为空,则说明括号匹配;否则,说明括号不匹配
return stack == []
三、结语
栈是一种非常重要的数据结构,它在计算机科学中有着广泛的应用。在这篇文章中,我们介绍了栈的数据结构,并利用栈来解决 leetcode 20. 有效的括号 的问题。通过这篇文章,您应该已经对栈的数据结构有了一个基本的了解,并且能够利用栈来解决一些简单的问题。