LEETCODE20括号匹配:栈和哈希表

文章介绍了一个名为`isValid`的函数,通过unordered_map存储左右括号对,利用栈数据结构检查输入字符串中的括号是否有效配对。函数通过遍历字符串,判断每个字符是否为右括号及其与栈顶左括号的匹配情况。
摘要由CSDN通过智能技术生成
class Solution {
public:
    bool isValid(string s) {
        int n = s.size();
        if (n % 2 == 1) {
            return false;//为奇数不是都成对
        }

        unordered_map<char, char> pairs = {
            {')', '('},
            {']', '['},
            {'}', '{'}
        };//利用unordered_map<键, 值>将右括号和左括号进行匹配
        stack<char> stk;//建立一个栈,因为通过分析可知左括号是先进后匹配也就是后出,刚好对应栈的特性
        for (char ch: s) {//遍历数组
            if (pairs.count(ch)) {
                //pairs.count(ch)是对unordered_map容器中的元素进行计数的操作。它返回具有给定键ch的元素的个数。

                //具体而言,对于给定的键ch,如果在pairs中存在相应的元素,则返回值为1;如果不存在,则返回值为0。
                //如果ch有对应元素就接着判断栈内和栈顶
                if (stk.empty() || stk.top() != pairs[ch]) {//栈为空或者栈顶不是对应左括号
                //用于比较栈顶元素与给定键ch在pairs中对应的值是否相等。
                //具体而言,这个条件语句用于检查栈顶元素与给定键对应的值是否匹配。如果栈顶元素与值不相等,意味着当前的括号不匹配
                    return false;
                }
                stk.pop();//为对应左括号则弹出
            }
            else {//该else对应还未加入该栈的元素
                stk.push(ch);
            }
        }
        return stk.empty();
    }
};

力扣解析中利用了unordered_map,unordered_map是根据哈希表建成的

一个链表中,每一个对应不止一个元素,将相同属性的放在同一个中

将右括号设为键左括号设为值

利用unordered_map中count方法计算map容器中是否有ch的键所对应的值,有就说明为右括号

在证明了该元素为右括号后,就查看栈中是否有对应值,栈为空或栈顶不为对应值都说明没有匹配的括号

else就说明有对应左括号,并将其弹出栈

最后利用判断栈是否为空检查是否有未匹配的括号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值