Input
输入包括多组测试数据,每组数据是一个字符串,字符串只包含“(){}[]<>”等字符。
Output
对于每组数据输出“YES”表示当前字符串中的括号是匹配的,否则输出“NO”(不包括引号)
SampleInput
() (<)>
SampleOutput
YES NO
题解:利用栈
代码:
#include<bits/stdc++.h>
using namespace std;
char e[2000000];
bool match(stack<char> s,char e[],int len)
{
for(int i=0;i<len;i++)
{
if(e[i]=='('||e[i]=='['||e[i]=='<'||e[i]=='{')
s.push(e[i]);
if(e[i]==')')
{
if(s.empty())
return 0;
else if(s.top()=='(')
s.pop();
else
return 0;
}
if(e[i]==']')
{
if(s.empty())
return 0;
else if(s.top()=='[')
s.pop();
else
return 0;
}
if(e[i]=='>')
{
if(s.empty())
return 0;
else if(s.top()=='<')
s.pop();
else
return 0;
}
if(e[i]=='}')
{
if(s.empty())
return 0;
else if(s.top()=='{')
s.pop();
else
return 0;
}
}
if(s.empty())
return 1;
else
return 0;
}
int main()
{
while(cin>>e)
{
stack<char> s;
int len=strlen(e);
if(match(s,e,len)&&len%2==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}