Parentheses Balance
Parentheses Balance |
You are given a string consisting of parentheses () and []. A string of this type is said to becorrect:
-
(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
就是括号匹配上了,就yes否则no
简单的用栈,如果读入的的栈定元素配上了,就把栈顶释放掉,否则就把读入的这个元素丢进栈。。
最后判断栈空不空;;(注意什么都不输入,要输出yes)
AC代码:
#include<iostream>
#include<stack>
#include<stdio.h>
#include<string>
using namespace std;
int main () {
int t;
stack<char> p;
string str;
cin >> t;
getchar();
while (t--) {
getline(cin, str);
if(str.size() == 0) {
printf("Yes\n");
continue;
}
for (int i = 0 ;i < str.size(); i++) {
if(p.empty()) {
p.push(str[i]);
continue;
}
if ((str[i] == ')' && p.top() == '(' ) || (str[i] == ']' && p.top() == '[') ) {
p.pop();
continue;
}
p.push(str[i]);
}
if(p.empty())
cout << "Yes"<<endl;
else
cout<< "No"<<endl;
while(!p.empty())
p.pop();
}
return 0;
}