堆栈_括号匹配

class Solution {
public:
    bool isValid(string s) {
        if(s.empty())
            return false;
        stack<int> s1;
        int n=s.size();
        for(int i=0;i<n;i++)
        {
            if(s[i]=='('||s[i]=='['||s[i]=='{')
                s1.push(s[i]);
            else if(s1.empty())
                return false;
            else if((s[i]==')'&&s1.top()=='(')||(s[i]==']'&&s1.top()=='[')||(s[i]=='}'&&s1.top()=='{'))
                s1.pop();
            else
                return false;
        }
        if(s1.empty())
            return true;
        else
            return false;
    }
};

此题的思路是:最前面的左括号要和最后面的右括号匹配,所以是一种先进后出的思想,使用堆栈最方便,且要注意括号的顺序,不能出现交叉的情况。

我在leetcode上做的时候,一开始没有注意到函数的返回值是bool,自己随便return值,所以出现了wrong answer,修改为返回false和true之后就正确了,细节要注意。

posted on 2016-03-31 22:38  summerkiki  阅读(388)  评论(0编辑  收藏  举报