5117: Simple Parenthesis Matching
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 52 Solved: 21
[Submit][Status][Web Board]
Description
Given a string P only consist of characters with (), [] and {}. Now BaoBao wants to know whether P can form a valid bracket string.
As we can know, in a valid bracket string, for each “(”, we can find a “)” behind it. In the same way, “[” and “{” also can find their “]” and “}”.
For example, “()”,"[]","{}","(()())","({})" are the valid bracket string.
Input
The first line contains a integer T(1 <= T <= 100), which indicates the number of test cases.
The next T lines, each line only contains a bracket string Pi(|Pi| <= 2*105).
It guaranteed that the sum of |Pi| <= 2*105.
Output
For each test cases, you just output “YES” if the string is valid or “NO” for not valid.
Sample Input
4
({})
{{}}
({[}])
}{
Sample Output
YES
YES
YES
NO
COde:
匹配括号个数即可 栈里面存什么并不要紧
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
stack<int> s1,s2,s3;
string s;
int flag=0;
cin>>s;
for(int i=0; i<s.size(); i++)
{
if(s[i]=='(')
{
s1.push(i);
}
else if(s[i]=='[')
{
s2.push(i);
}
else if(s[i]=='{')
{
s3.push(i);
}
if(s[i]==')')
{
if(s1.empty())
{
flag=1;
break;
}
s1.pop();
}
else if(s[i]==']')
{
if(s2.empty())
{
flag=1;
break;
}
s2.pop();
}
else if(s[i]=='}')
{
if(s3.empty())
{
flag=1;
break;
}
s3.pop();
}
}
if(flag)
printf("NO\n");
else if(!s1.empty()||!s2.empty()||!s3.empty())
{
printf("NO\n");
}
else
printf("YES\n");
}
return 0;
}