您的位置:首页 > 其它

UVA_673: Parentheses Balance

2015-10-14 17:07 381 查看
Description





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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: