有效括号序列

思路:

由于需要进行括号匹配,由于对于最晚的进入的待匹配的括号是最早进行匹配的,所以符合后入先出的结构,所以用一个栈进行辅助

图解:

链接

代码:

class Solution {
public:
    //由于需要进行括号匹配,由于对于最晚的进入的待匹配的括号是最早进行匹配的
    //所以符合后入先出的结构,所以用一个栈进行辅助
    bool isValid(string s) {
        stack<char>s1;
        //遍历字符串,只要遇到左括号,就将其对应的右括号压入栈中,等待匹配
        //之后如果遇到右括号,就进行判断是否与栈顶元素一致,如果一致就表示
        //能进行匹配,再将栈顶的这个已经匹配的括号出栈
        //如果匹配的时候发现栈是空的,就表明没有对应的括号进行匹配,返回false
        for(int i=0;i<s.length();i++){
            if(s[i]=='('){
                s1.push(')');
            }else if(s[i]=='{'){
                s1.push('}');
            }else if(s[i]=='['){
                s1.push(']');
            }else if(s1.empty()){
                return false;
            }else if(s1.top()==s[i]){
                s1.pop();
            }
        }
        //最后如果字符串是合法的,就一定能够完全匹配,最后栈为空,则表示合法的串
        return s1.empty();
    }
};