| Brackets! Brackets! | ||||||
|
||||||
| Description | ||||||
|
There are six kinds of brackets: ‘(‘, ‘)’, ‘[‘, ‘]’, ‘{’, ‘}’. dccmx’s girl friend is now learning java programming language, and got mad with brackets! Now give you a string of brackets. Is it valid? For example: “(([{}]))” is valid, but “([)]” is not. |
||||||
| Input | ||||||
|
First line contains an integer T (T<=10): the number of test case. Next T lines, each contains a string: the input expression consists of brackets. The length of a string is between 1 and 100. |
||||||
| Output | ||||||
|
For each test case, output “Valid” in one line if the expression is valid, or “Invalid” if not. |
||||||
| Sample Input | ||||||
|
2
{{[[(())]]}} ({[}]) |
||||||
| Sample Output | ||||||
|
Valid
Invalid 注意()()这种情况合法。()())这种情况会令flag==0;()(这种情况会令栈为空。
如果出现一个右括号,那么在栈非空的情况下,如果合法必然栈顶元素和这个右括号相匹配。那么在这两个条件都不能满足的条件下flag==0;
#include<iostream>
#include<string.h>
#include<stack>
using namespace std;
int main()
{
int T;char gq[101];
cin>>T;
while(T--)
{
stack<char>ls;
scanf("%s",&gq);
int flag=1;
for(int i=0;i<strlen(gq);i++)
{
if(gq[i]=='('||gq[i]=='{'||gq[i]=='[')
ls.push(gq[i]);
else
{
if(gq[i]==')')
{
if(!ls.empty()&&ls.top()=='(')
{
ls.pop();
}
else
{
flag=0;
break;
}
}
else if(gq[i]=='}')
{
if(!ls.empty()&&ls.top()=='{')
{
ls.pop();
}
else
{
flag=0;
break;
}
}
else if(gq[i]==']')
{
if(!ls.empty()&&ls.top()=='[')
{
ls.pop();
}
else
{
flag=0;
break;
}
}
}
}
if(!ls.empty()||flag==0)
cout<<"Invalid"<<endl;
else
cout<<"Valid"<<endl;
}
return 0;
}
|
原文地址:http://blog.csdn.net/lsgqjh/article/details/44993621