Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu
Description
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
#include <iostream>
#include <stdio.h>
#include <stack>
#include <string.h>
using namespace std;
const int N = 150;
char str[N];
int main() {
int t;
while(scanf("%d",&t) != EOF) {
getchar();
while(t--) {
gets(str);
//puts(str);
stack<char> st;
int len = strlen(str);
for(int i = 0; i < len; i++) {
if(str[i] == '(' || str[i] == '[') {
st.push(str[i]);
}
else {
if(st.size() && str[i] == ')' && st.top() == '(') {
st.pop();
}
else
if( st.size() && str[i] == ']' && st.top() == '[') {
st.pop();
}
else
st.push(str[i]);
}
}
if(st.size() == 0) {
printf("Yes\n");
}
else {
printf("No\n");
}
}
}
return 0;
}