Parentheses Balance
Parentheses Balance |
You are given a string consisting of parentheses () and []. A string 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 check their correctness. Your program can assume that the maximum string length is 128.
Input
The file contains a positive integer n and a sequence of n strings of parentheses () and [] , one string a line.Output
A sequence of Yes or No on the output file.Sample Input
3 ([]) (([()]))) ([()[]()])()
Sample Output
Yes No Yes
Miguel Revilla
2000-08-14
一道符号匹配的问题,这类题是栈的典型应用了,比较简单,只需要注意一下各种情况不然很容易wrong answer
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
string str1;
getline(cin,str1);
while(n--)
{
string str;
stack<char> s;
int i,flag=1;
getline(cin,str);
for(i=0;i<str.size();i++)
{
if(str[i]=='(')
{
s.push(str[i]);
}
else if(str[i]=='[')
{
s.push(str[i]);
}
else if(str[i]==')')
{
if(s.empty())
{
flag=0;
break;
}
else if(s.top()!='(')
{
flag=0;
break;
}
else
{
s.pop();
}
}
else if(str[i]==']')
{
if(s.empty())
{
flag=0;
break;
}
else if(s.top()!='[')
{
flag=0;
break;
}
else
{
s.pop();
}
}
}
if(!s.empty()) flag=0;
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}