Description
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
今天校赛做了个类似于这样的题,比这个难,这里设了个坑,就是空行的时候要输出yes,其它的用栈正常做就行。
LANGUAGE:C++
CODE:
#include<iostream> #include<stack> #include<cstring> #include<cstdio> using namespace std; bool judge(char a,char b) { if(a=='['&&b==']')return 1; if(a=='('&&b==')')return 1; return 0; } bool left(char a) { if(a=='['||a=='(')return 1; return 0; } int main() { int cas; char s[200]; cin>>cas; getchar(); while(cas--) { stack<char>q; gets(s); if(strcmp(s,"\n")==0) { cout<<"Yes"<<endl; continue; } for(int i=0;s[i];i++) { if(q.empty()) { q.push(s[i]); } else if(!judge(q.top(),s[i])) { if(left(s[i])) q.push(s[i]); } else q.pop(); } if(q.empty())cout<<"Yes"<<endl; else cout<<"No"<<endl; } }