c/c++蓝桥杯经典编程题100道(18)括号匹配

括号匹配

->返回c/c++蓝桥杯经典编程题100道-目录


目录

括号匹配

一、题型解释

二、例题问题描述

三、C语言实现

解法1:栈匹配法(难度★)

解法2:计数器法(仅限单一括号类型,难度★☆)

四、C++实现

解法1:使用STL栈(难度★)

解法2:哈希表优化(难度★★)

五、总结对比表

六、特殊方法与内置函数补充

1. C语言中的动态栈

2. C++的 unordered_map

3. 递归解法(不推荐)


一、题型解释

括号匹配是验证字符串中的括号是否正确闭合的问题。常见题型:

  1. 基础匹配:验证字符串中的 ()[]{} 是否成对且顺序正确。

  2. 包含其他字符:字符串中混合其他字符(如字母、数字),需跳过非括号字符。

  3. 最长有效括号子串:找到字符串中最长的有效括号子串长度。

  4. 最小添加次数:计算使括号匹配所需最少添加的括号数量。


二、例题问题描述

例题1:输入 "()[]{}",输出 true(所有括号正确匹配)。
例题2:输入 "{[()]}",输出 true(嵌套括号正确匹配)。
例题3:输入 "(]",输出 false(括号类型不匹配)。
例题4:输入 "()(()",输出最长有效子串长度 2


三、C语言实现

解法1:栈匹配法(难度★)

通俗解释

  • 像叠盘子一样,遇到左括号“放入盘子”,遇到右括号时检查最上面的盘子是否匹配。

c

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

#define MAX_SIZE 10000

bool isValid(char *s) {
    char stack[MAX_SIZE]; // 用数组模拟栈
    int top = -1;         // 栈顶指针
    for (int i = 0; s[i] != '\0'; i++) {
        char c = s[i];
        if (c == '(' || c == '[' || c == '{') { // 左括号入栈
            stack[++top] = c;
        } else { // 右括号检查匹配
            if (top == -1) return false; // 栈为空,无法匹配
            char topChar = stack[top--];
            if ((c == ')' && topChar != '(') || 
                (c == ']' && topChar != 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值