描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<cstdio>
using namespace std;
struct sStack
{
char sign[10010];
int top;
};
void initstack(sStack &s)
{
s.top = -1;
}
bool isemptystack(sStack &s)
{
return s.top == -1 ? 1 : 0;
}
int pushstack(sStack &s, char c)
{
s.sign[++s.top] = c;
return 1;
}
int popstack(sStack &s)
{
if(isemptystack(s))
return 0;
s.top--;
return 1;
}
char topstack(sStack &s)
{
if(isemptystack(s))
return 0;
return s.sign[s.top];
}
int main()
{
int N, len, i;
bool flag;
char str[10010];
sStack s;
scanf("%d", &N);
while(N--)
{
flag = 1;
scanf("%s", str);
len = strlen(str);
initstack(s);
for(i = 0; i < len; ++i)
{
if(str[i] == '(' || str[i] == '[' || str[i] == '{')
pushstack(s, str[i]);
else if(str[i] == ')')
{
if(isemptystack(s) || topstack(s) != '(') flag = 0;
else popstack(s);
}
else if(str[i] == ']')
{
if(isemptystack(s) || topstack(s) != '[') flag = 0;
else popstack(s);
}
else if(str[i] == '}')
{
if(isemptystack(s) || topstack(s) != '{') flag = 0;
else popstack(s);
}
}
if(!isemptystack(s))
{
flag = 0;
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
括号配对问题
最新推荐文章于 2020-12-11 21:17:40 发布