游客 Signup | Login
中文 | En

1546 - Problem E

请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。

Input

有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。

Output

对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。

Examples

Input

4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9

Output

yes
no
no
no

Solution C

#include <stdio.h>

int main()
{
	int ncase;
	scanf("%d",&ncase);
	getchar();
	while(ncase--)
	{
		char ch;
		int flag = 1;
		char a[500];
		int i = -1;
		while(scanf("%c",&ch)!=EOF && ch != '\n')
		{
			if(ch == ')' ||ch == ']' || ch == '}')
			{
				if(i==-1)
				{
					flag = 0;
				}
				else 
				{
					if((a[i] == '(' && ch == ')') ||  (a[i] == '[' && ch == ']') ||  (a[i] == '{' && ch == '}') )
					{
						i--;
					}
				}
			}
			else if(ch == '(' || ch == '[' || ch == '{')
			{
				i++;
				a[i] = ch;

			}
			else 
			{
				continue;
			}
		}
		if(flag == 0 || i != -1)
		{
			printf("no\n");
		}
		else 
		{
			printf("yes\n");
		}


	}

	return 0;
}

Solution C++

#include<stdio.h>

char st[1000000];
char str[1000000];

int main() {
	int N,i,sp;
	for(scanf("%d",&N);N--;) {
		scanf("%s",str);
		for(i=sp=0;str[i];i++) {
			if (str[i]=='(' || str[i]=='[' || str[i]=='{') st[sp++]=str[i];
			else if (str[i]==')') {
				if (!sp || st[sp-1]!='(') break;
				--sp;
			} else if (str[i]==']') {
				if (!sp || st[sp-1]!='[') break;
				--sp;
			} else if (str[i]=='}') {
				if (!sp || st[sp-1]!='{') break;
				--sp;
			}
		}
		if (!str[i] && !sp) puts("yes"); else puts("no");
	}
	return 0;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题