LeetCode(20):有效的括号

题目描述

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
3、注意空字符串可被认为是有效字符串。

实现思路

最直观的思路当然是使用栈
在此之前,先创建一个无序的键值对,用于记录左右括号之间的对应关系
然后遍历输入的字符串:
1、遇到左括号,push入栈
2、遇到右括号:
2.1、栈已空or栈顶元素与其不匹配:直接判定非法
2.2、栈顶元素与其匹配:将栈顶元素弹出栈

遍历结束后,再次检查栈是否已空
如果栈已空,说明括号全部匹配;否则就是非法的

代码实现(C++)

class Solution {
public:
   
    bool isValid(string s) {
        if(s==""){
            return true;
        }
        unordered_map<char, char> pairs = {
            {')', '('},
            {']', '['},
            {'}', '{'}
        };
        stack<char> stk;

        for(char ch:s){
            if(pairs.count(ch)>0){
                if(stk.empty()==true || stk.top()!=pairs[ch]){
                    return false;
                }else{
                    stk.pop();
                }
            }else{
                stk.push(ch);
            }
        }

        return stk.empty();
    }
};
原文地址:https://www.cnblogs.com/baebae996/p/13857230.html