UVa 673 Parentheses Balance (栈)2014-07-14 csdn博客 synapse7673 - Parentheses BalanceTime limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=614You 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
YesNoYes
技巧:在栈底加一个元素,减少代码量。完整代码:
/*0.029s*/#include<cstdio>#include<cstring>#include<stack>using namespace std;stack<char> s;char str[130];int main(void){int t;scanf("%d", &t);getchar();while (t--){gets(str);int len = strlen(str);if (len & 1)puts("No");else{if (!s.empty())s.pop();s.push("0");///“记号”for (int i = 0; i < len; ++i){if (str[i] == "(" || str[i] == "[")s.push(str[i]);else if (str[i] == ")"){if (s.top() == "(")s.pop();else{s.push("1");break;}}else/// "]"{if (s.top() == "[")s.pop();else{s.push("1");break;}}}puts(s.top() == "0" ? "Yes" : "No");}}return 0;}