题解 | #有效括号序列#
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return bool布尔型 */ bool isValid(char * s){ //先创建顺序栈,栈顶指针; char seqstack[10000]=" ";int p; //初始化顺序栈: p=0; //判断 int i=0;char t; while(s[i]!='\0'){ if(s[i]=='('||s[i]=='['||s[i]=='{'){ if(s[i]=='(') t=')'; if(s[i]=='[') t=']'; if(s[i]=='{') t='}'; p=p+1; seqstack[p]=t; } else { if(seqstack[p]!=s[i]){ return false; } else p--; } i++; } if(p==0){ return true; } else return false; }
这里说明一下这个栈顶指针p为什么不从-1开始,是因为最后我们判断栈空不是看顺序栈而是看栈顶指针是不是初始值,如果我们初始值是-1,看似说的通,但是我实操后发现 if(seqstack[p]!=s[i]){
return false;
}
else p--;
这一步代码的判断条件在p=-1是会报错的,所以我们应该把栈顶指针改0好操作下一部分;