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; } };
分析:
一个简单题啊,还是情况没分析到位,一开始思路错了。
后来思路对了,但是程序总是有毛病,但是总得来说还是情况没分析到位。