有效的括号

有效的括号

这道题属于是括号匹配问题,用右括号去匹配左括号,当匹配成功时弹出左括号

此时我们可以想到可以用一种数据结构来表达这种匹配模式:栈

用栈读取左括号,当左括号与右括号匹配成功时就,弹出栈顶

而神奇的很,我们还可以用askll码来看两个符号是否匹配

look this

有效的括号

小括号,中括号,大括号之间的askll码 隔了一条巨大的鸿沟,而小括号之间askll码只隔了1,中括号,大括号之间隔了2,所以我们可以以askll码相减小于2,作为匹配成功的条件。

注意:左括号小于右括号,这里要用取绝对值的函数。

步骤:

1.遍历整个字符串,把左括号全部入栈

2.若不是左括号,则进行判断,若栈为空,或askll码相减大于2,则return false,若匹配成功则淡出栈顶。

3.如果全部匹配完成的话栈是为空的。

class Solution {
public:
    bool isValid(string s) {
    stack<char>stk;
    for(auto c:s){
        if(c=='('||c=='['||c=='{'){
            stk.push(c);
        }
        else {
        if(stk.size()&&abs(stk.top()-c)<=2)stk.pop();
        else return false;}
    }
    return stk.empty();

    }
};

上一篇:C++ stack容器详解


下一篇:栈-括号匹配