acm括号配对问题
下边的文章会安装wp-code插件!
括号配对问题ACM
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现在,有一行括号序列,请你检查这行括号是否配对。
-
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“,”]”,”(“,”)”四种字符
- 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
- 样例输入
-
[/cpp]3
[/cpp][(])
[/cpp](])
[/cpp]([[]()])
- 样例输出
-
[/cpp]No
[/cpp]No
[/cpp]Yes
#include <iostream>
#include <string>
using
namespace
std;
struct
Stack
{
char
*stack;
int
top;
};
void
init(Stack &S)
{
S.stack=
new
char
[10000];
S.top=-1;
}
void
Push(Stack &S,
char
&ch)
{
S.top++;
S.stack[S.top]=ch;
}
void
Pop(Stack &S)
{
S.top--;
}
int
Peek(Stack &S)
{
return
S.stack[S.top];
}
int
main()
{
Stack S;string str;
int
x,d,i;cin>>d;
while
(d--)
{
init(S);
cin>>str;x=0;
for
(i=0;i<str.size();i++)
{
switch
(str[i])
{
case
'['
:
case
'('
:Push(S,str[i]);
break
;
case
']'
:
if
(Peek(S)==
'['
) Pop(S);
else
x=1;
break
;
case
')'
:
if
(Peek(S)==
'('
) Pop(S);
else
x=1;
break
;
}
if
(x==1)
break
;
}
if
(S.top==-1&&x==0) cout<<
"Yes"
<<endl;
else
cout<<
"No"
<<endl;
delete
[] S.stack;
}
return
0;
}