【问题描述】
判断一个合法的括号串,是指只包含括号的串,如果满足如下条件:
(1){},[],<>,() 这四对括号是合法的;
(2)如果r是合法的,则<r>{r}(r)[r]也是合法的;
(3)如果r,s是合法的,则rs也是合法的;
所以<<>>,[<>{}(())],[{(<>)}]是合法的,)({(}]就不是合法的。
【输入格式】
输入文件包含六组测试数据,每组测试数据是一行只包含’(‘,’)’,’{‘,’}’,’[‘,’]’,’<’,’>’的字符串(长度不超过10000)。一行中不要用空格分隔。
【输出格式】
对于每组测试数据,如果是合法的括号串,输出yes,否则输出no。每个占一行,并且行尾不得有多余的空格。
【样例输入】
{()}[]<>
【样例输出】
Yes
【样例说明】
输入样例是合法的括号串,因此输出yes。
【样例输入】
){})
【样例输出】
no
【样例说明】
输入样例是不合法的括
#include<iostream>
#include<stack>
using namespace std;
int main()
{
string str;
stack<char>L1;
stack<char>L2;
cin>>str;
int len=str.length();
for(int i=0;i<len;i++)
{
if(str[i]=='<'||str[i]=='{'||str[i]=='('||str[i]=='[')
L1.push(str[i]);
else if(L1[i]=='>')
{
if(!L1.empty()&&L1.top()=='<')
L1.pop();
else
L2.push(str[i]);
}
else if(L1[i]=='}')
{
if(!L1.empty()&&L1.top()=='{')
L1.pop();
else
L2.push(str[i]);
}
else if(L1[i]==')')
{
if(!L1.empty()&&L1.top()=='(')
L1.pop();
else
L2.push(str[i]);
}
else if(L1[i]==']')
{
if(!L1.empty()&&L1.top()=='[')
L1.pop();
else
L2.push(str[i]);
}
}
if(L1.empty()&&L2.empty()) cout<<"yes"<<endl;
else cout<<"no"<<endl;
return 0;
}
号串,因此输出no。