文章

17

粉丝

0

获赞

57

访问

3.3k

头像
括号的匹配 题解:数组模拟栈,C语言
P1067 中山大学机试题
发布于2026年3月27日 10:13
阅读数 157

#include <stdio.h>
#include <string.h>
int val(char c){
	switch (c){
	case '{':return 4;
	case '[':return 3;
	case '(':return 2;
	case '<':return 1;
	case '}':return -4;
	case ']':return -3;
	case ')':return -2;
	case '>':return -1;		
	default: return 0;
	}
}
int main(){
	int n;
	scanf("%d",&n);
	getchar(); //清除缓冲区
	while(n--){
		char a[257];
		gets(a);
		int k = strlen(a);
		int j=1;
		char b[257];
		b[0]=a[0];
		int flag=1;
		for(int i=1;i<k;i++){	
			//左括号
			if(val(a[i])>0){
				if(j==0||val(b[j-1])>=val(a[i])){
					b[j++] =a[i];
				}
			}else if(val(b[j-1])<val(a[i])){
				flag=0;
				break;
			}
			//右括号
			else if(val(a[i])<0){
				if(val(a[i])+val(b[j-1])==0){
					j--;
				}else {
					flag=0;
					break;
				}
			}
		}
		if(flag==1 && j==0) puts("YES");  
		else puts("NO");
	}

return 0;

}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发