bool isValid(char * s){
char a[10000];
int top,i,j;
char n,m;
for(i=0;i<10000;i++) a[i]=0;//初始化
top=-1;//栈空top=-1
j=0;
for(i=0;s[i]!='\0';i++){
switch(s[i]){
case '(': ;
case '{': ;
case '[':
a[j]=s[i];
top++;
j++;
break;
case '}': ;
case ']': ;
case ')':
if(top==-1)
return false;
else {
if(s[i]-a[top]==1||s[i]-a[top]==2){
top--;
}else return false;
}
}
}
if(top==-1){
return true;
}else return false;
}
我直接用的栈并没有使用函数,我判定匹配的方法是ascii码,()差1,[]和{}差2
原题就是LeetCode20题
求大佬告诉哪错了
if(s[i]-a[top]==1||s[i]-a[top]==2){
top--;
j--; // top减一了,j也要减一
}else return false;
根据你的说法,if(s[i]-a[top]==1||s[i]-a[top]==2){就有漏洞了,比如我先输入{,然后输入ASCII码sh是'{'+1的字符,你这个条件也是会通过的啊。但显然不是你希望的。
还是要区分一下,要求S[i]和a[top]必须为匹配的符号才可以
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632