Description
![Download as PDF Download as PDF](https://i-blog.csdnimg.cn/blog_migrate/2ea975a8d421ce3226c46b0946fd5932.png)
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
分析:本题是典型的栈的运用。对输入流的字符进行判断,如果是‘)‘或’]‘则比较栈顶,否则入栈。要注意空字符串也是合法。
#include <iostream>
#include <stack>
#include <string>
#include <cstdio>
using namespace std;
const int maxn = 130;
stack<char> stk;
char rev(int c)
{
if(c=='(')return ')';
if(c=='[')return ']';
}
int main()
{
int T;
cin >> T;
getchar();
while(T--)
{
string s;
getline(cin, s);
int yes = 1;
for(int i=0; i<s.length(); i++){
if(s[i]==')'||s[i]==']'){
if(stk.empty()){yes=0;break;}
char c = stk.top();
if(s[i]==rev(c))stk.pop();
else {yes=0;break;}
}else stk.push(s[i]);
}
if(yes && stk.size()>0) yes=0;
if(yes)cout << "Yes\n";
else cout << "No\n";
while(!stk.empty())stk.pop();
}
return 0;
}