题目大意: 给出只含有 ( ) [ ] 这四种括号的字符串,判断括号是否配对;
思路: 用栈来解决; 当输入左侧括号时入栈,输入右侧括号时判断栈顶元素是否和当前括号匹配,如果匹配就删除栈顶元素,不匹配就让当前元素入栈,最后判断是否是空栈,如果是,代表可以全部匹配,否则不能全部匹配。
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <stack> #define ll long long using namespace std; int main () { int n,m,i,t,j,k,l; string s; stack <char> a; cin>>n; while(n--) { cin>>s; l=s.length(); for (i=0;i<l;++i) { if (a.empty() || s[i]=='(' || s[i]=='[') a.push(s[i]); else if ((a.top()=='(' && s[i]==')')||(a.top()=='[' && s[i]==']')) a.pop(); else a.push(s[i]); } if (a.empty()) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }