想问一下为什么这道括号匹配的题输入()[]{}不通过?

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