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;i1;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;elsereturn false;}stack<int> str;while(start 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();elsereturn false;//否则假 }start++;}if(!str.empty())//结束后检测栈空不,不然对于全是左括号的就通过了return false;return true;} };
分析:
一个简单题啊,还是情况没分析到位,一开始思路错了。
后来思路对了,但是程序总是有毛病,但是总得来说还是情况没分析到位。