leecode第二十题(有效的括号)

 

class Solution {
public:
    bool isValid(string s) {
        int start=0,end=s.size()-1;
        if(end==-1)//万万没想到,他把空字符串当成true了
            return true;
        
        int ss[end+1];//歪方法,把左括号全部<0,右括号都>0,且同类型符号绝对值一样
        for(int i=0;i<end+1;i++)
        {
            if(s[i]=='(')
                ss[i]=-1;
            else if(s[i]==')')
                ss[i]=1;
            else if(s[i]=='{')
                ss[i]=-2;
            else if(s[i]=='}')
                ss[i]=2;
            else if(s[i]=='[')
                ss[i]=-3;
            else if(s[i]==']')
                ss[i]=3;
            else
                return false;
        }
        
        stack<int> str;
        while(start<end+1)//要等于end啊,老是忘
        {
            if(ss[start]<0)//如果小于0就入栈
                str.push(ss[start]);
            
            if(ss[start]>0)//如果大于0,判断栈空不空,不空的话栈顶和当前数是否编号
            {
                if(!str.empty() && ss[start]==-1*(str.top()))
                    str.pop();
                else
                    return false;//否则假
            }
            start++;
        }
        
        if(!str.empty())//结束后检测栈空不,不然对于全是左括号的就通过了
            return false;
        return true;
    }
};

 

分析:

一个简单题啊,还是情况没分析到位,一开始思路错了。

后来思路对了,但是程序总是有毛病,但是总得来说还是情况没分析到位。

posted @ 2019-03-23 11:18  深夜十二点三十三  阅读(225)  评论(0编辑  收藏  举报