UVA 673 (13.08.17)
Parentheses Balance |
You are given a string consisting of parentheses () and []. Astring 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 checktheir correctness. Your program can assume that the maximum stringlength is 128.
Input
The file contains a positive integer n and a sequence of n strings ofparentheses () and [], one string a line.
Output
A sequence of Yes or No on the output file.
Sample Input
3 ([]) (([()]))) ([()[]()])()
Sample Output
Yes No Yes
题意: 匹配小括号和中括号~
做法及其注意点:
一种情况是遇到 '(' 或 '[', 那么直接放到栈里不解释~
另一种情况是遇到 ')' 或 ']', 进行判定, 是否前一个是 '(' 或 '[' (注意了, 此时栈也许是空的), 若是, 弹出栈~
最后判断是否为空~
AC代码:
#include<stdio.h> #include<stack> using namespace std; int main() { int T; char ch; scanf("%d", &T); getchar(); while(T--) { stack <char> sta; while(scanf("%c", &ch)) { if(ch == '\n') break; if(sta.empty()) { sta.push(ch); continue; } if(ch == '(') sta.push(ch); if(ch == ')') { if(sta.top() == '(') sta.pop(); else sta.push(ch); } if(ch == '[') sta.push(ch); if(ch == ']') { if(sta.top() == '[') sta.pop(); else sta.push(ch); } } if(sta.empty()) printf("Yes\n"); else printf("No\n"); } return 0; }