UVA - 673 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, () and [] 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


水题一道,用stack

#include <iostream>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;

bool is_ok(char x, char y)
{
	if (x == '(') return y == ')';
	if (x == '[') return y == ']';
	return false;
}

int main()
{
	int T; cin >> T;
	cin.get();
	while (T--)
	{
		string str; getline(cin, str);
		stack<char> all;
		for (size_t i = 0; i < str.length(); i++){
			char t = str[i];
			if (all.empty() || !is_ok(all.top(), t))
				all.push(t);
			else
				all.pop();
		}
		if (all.empty())
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
	return 0;
}


posted @ 2014-12-10 23:47  Popco  阅读(113)  评论(0编辑  收藏  举报