括号匹配算法:使用栈结构判断括号是否匹配
① 采用栈这种逻辑结构。因为括号匹配问题可以利用栈的后进先出特性来解决。当遇到左括号时,将其入栈;当遇到右括号时,判断栈顶元素是否与当前右括号匹配,如果匹配则将栈顶元素出栈,否则括号不匹配。
② 采用数组作为栈的物理结构。使用数组作为栈的物理结构可以实现快速的入栈和出栈操作。
③ 解决该问题的思路、方法和流程:
- 从键盘输入一个包含有花括号{}、中括号[]、小括号()的字符串。
- 创建一个数组作为栈,并初始化栈顶指针为-1。
- 遍历输入的字符串的每个字符:
- 如果是左括号,则将其入栈。
- 如果是右括号,则判断栈是否为空,如果为空,则括号不匹配;如果不为空,则判断栈顶元素是否与当前右括号匹配,如果匹配则将栈顶元素出栈,否则括号不匹配。
- 遍历完字符串后,判断栈是否为空,如果为空,则括号匹配,否则括号不匹配。
- 输出判断结果。
示例代码(Python):
def is_valid_parentheses(s):
stack = []
for c in s:
if c in ['{', '[', '(']:
stack.append(c)
elif c in ['}', ']', ')']:
if not stack:
return False
top = stack.pop()
if (c == '}' and top != '{') or (c == ']' and top != '[') or (c == ')' and top != '('):
return False
return len(stack) == 0
s = input("请输入包含有花括号{}、中括号[]、小括号()的字符串:")
if is_valid_parentheses(s):
print("括号匹配")
else:
print("括号不匹配")
这段代码的思路是,遍历输入的字符串的每个字符,如果是左括号,则将其入栈;如果是右括号,则判断栈是否为空,如果为空,则括号不匹配;如果不为空,则判断栈顶元素是否与当前右括号匹配,如果匹配则将栈顶元素出栈,否则括号不匹配。最后判断栈是否为空,如果为空则括号匹配,否则括号不匹配。
原文地址: https://www.cveoy.top/t/topic/pviu 著作权归作者所有。请勿转载和采集!