Parentheses Balance
Parentheses Balance |
You are given a string consisting of parentheses () and []. Astring of this type is said to be correct:
-
(a)
- if it is the empty string (b)
- if A and B are correct, AB is correct, (c)
- if A is correct, (A ) and [A ] is correct.
Write a program that takes a sequence of strings of this type and checktheir correctness. Your program can assume that the maximum stringlength is 128.
Input
The file contains a positive integer n and a sequence of n strings ofparentheses () and [], one string a line.Output
A sequence of Yes or No on the output file.Sample Input
3 ([]) (([()]))) ([()[]()])()
Sample Output
Yes No Yes
解决方案:先删掉"[]" "()"之类的组合,得到新的序列,重复刚才的动作,直到没有可删的为止。用list模拟即可。
#include<iostream>
#include<cstdio>
#include<list>
#include<cstring>
using namespace std;
list<char>L;
int main()
{
int n;
while(~scanf("%d",&n))
{
getchar();
for(int k=0;k<n;k++)
{
char c[200];
L.clear();
gets(c);
//cout<<c<<endl;
for(int i=0;i<strlen(c);i++)
{
L.push_back(c[i]);
}
if(strlen(c)==0) {cout<<"Yes\n";continue;}
list<char>::iterator j;
list<char>::iterator i;
while(1)
{
bool flag=false;
for(j=L.begin();j!=L.end();j++)
{
i=++j;
j--;
if((*j)=='('&&(*i)==')')
{
L.erase(i);
L.erase(j);
flag=true;
break;
}
if((*j)=='['&&(*i)==']')
{
L.erase(i);
L.erase(j);
flag=true;
break;
}
}
if(!flag) break;
}
// cout<<L.size()<<endl;
if(L.size()==0) cout<<"Yes\n";
else cout<<"No\n";
}
}
return 0;
}