Leetcode 20. Valid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

题目大意:括号匹配是否正确

题目分析:主要用的数据结构是,遍历是字符串,当遇到的是括号则进栈,遇到括号则把栈顶字符与它比较看是否匹配,不匹配的false。若遍历完成后栈不空,也为false。

代码1(使用了额外空间,用数组去记录标识括号的特征,左括号是偶数,右括号是奇数):

class Solution {
public:
    bool isValid(string s) {
        if(s.empty()) return true;
        stack<char> st;
        int flag[150];
        memset(flag,-1,150);
        flag['(']=0;flag['[']=2;flag['{']=4;
        flag[')']=1;flag[']']=3;flag['}']=5;
        for(auto a:s){
            if(1==flag[a]%2&&!st.empty()&&1==flag[a]-flag[st.top()])
                st.pop();
            else if(flag[a]%2==0)
                st.push(a);
            else
                return false;
        }
        return st.empty();
    }
};

代码2(不使用额外空间,出自discuss):

class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        for(auto a:s){
            if(a=='('||a=='['||a=='{')
                st.push(a);
            else{
                if(st.empty()) return false;
                if(a==')'&&st.top()!='(') return false;
                if(a==']'&&st.top()!='[') return false;
                if(a=='}'&&st.top()!='{') return false;
                st.pop();
            }
        }
        return st.empty();
    }
};

你可能感兴趣的:(LeetCode,C++,栈,stack,括号匹配)