Brackets! Brackets!

来源:互联网 发布:杨贵妃 山口百惠 知乎 编辑:程序博客网 时间:2024/04/30 11:12
Brackets! Brackets!Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 698(239 users)Total Accepted: 272(210 users)Rating: Special Judge: NoDescription

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;elsecout<<"Valid"<<endl;}return 0;}

0 0
原创粉丝点击