Parentheses Balance
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
大意:
给出一串字符串符合
1:字符串是空串;
2:A和B是正确的,AB也是正确的;
3:A是正确的,(A)和[A]也是正确的;
输出YES,否则输出NO
要点:
可以用栈来实现匹配,如果是左括号则入栈,如果是右括号则和栈顶元素匹配;
重点注意该字符串可能是空串;
代码:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(){
string str;
int num;
cin >> num;
cin.get();
while (num--){
stack<char> stc;
getline(cin, str);
bool f = true;
for (int i = 0; i < str.size(); i++){
if (str[i] == '(' || str[i] == '[')
stc.push(str[i]);
else if (!stc.empty() && str[i] == ')' && stc.top() == '(')
stc.pop();
else if (!stc.empty() && str[i] == ']' && stc.top() == '[')
stc.pop();
else{
f = false;
break;
}
}
if (stc.empty() && f)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}