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 题意: 对括号进行匹配,利用栈的知识点#include<cstring> #include<iostream> #include<cstdio> #include<stack> #include<algorithm> using namespace std; int main() { int n; scanf("%d",&n); getchar(); char a[100]; stack<char > s; while(n --) { memset(a,0,sizeof(a)); gets(a); int len = strlen(a); if(len %2 == 0) { for(int i = 0; i < len ; i++) { if(a[i] == '\n') break; if(a[i] == '(' || a[i] == '[') s.push(a[i]); if(a[i] == ')') { if(!s.empty()) { if(s.top() == '(') s.pop(); } } if(a[i] == ']') { if(!s.empty()) { if(s.top() == '[') s.pop(); } } } if(s.empty()) printf("Yes\n"); else printf("No\n"); } else printf("No\n"); } return 0; }
方法二:#include <cstdio> #include <iostream> #include <string> #include <stack> using namespace std; string s; stack<char> st; bool check() { int len = s.length(); while(!st.empty()) st.pop(); for(int i = 0; i < len; i++) { if(s[i] == '\n') break; if(s[i] == '(' || s[i] == '[') st.push(s[i]); else{ if(s[i] == ')') { if(st.empty()) return 0; else if(st.top() == '(') st.pop(); else return 0; } else if(s[i] == ']') { if(st.empty()) return 0; else if(st.top() == '[') st.pop(); else return 0; } } } return st.empty(); } int main() { int T; cin >> T; getline(cin, s); while(T--) { getline(cin, s); if(check()) puts("Yes"); else puts("No"); } return 0; }