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
Sample Output
Yes
No
Yes
题意:给出一个字符串,判断是否符合题目中给出的3条要求,其实就是判断()和[]是否匹配的问题
方法:可以使用栈来解决这个问题,将”(“和”[“入栈,判断下一个字符是”)”还是”]”,以此出栈相应的匹配符
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
const int maxn = 128 + 5;
char s[maxn];
int main(){
int T;
scanf("%d", &T);
getchar();
while(T--){
stack<char> li;
bool flag = true;
gets(s);
int len = strlen(s);
for(int i = 0; i < len; i++){
char ch = s[i];
if(ch == '(' || ch == '[')
li.push(ch);
else if(ch == ')'){
if(!li.empty() && li.top() == '(')
li.pop();
else{
flag = false;
break;
}
}
else if(ch == ']'){
if(!li.empty() && li.top() == '[')
li.pop();
else{
flag = false;
break;
}
}
}
if(flag && li.empty())
printf("Yes\n");
else
printf("No\n");
}
return 0;
}