
1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 #include <stack> 5 #include <algorithm> 6 #include <cmath> 7 using namespace std; 8 9 stack<char> q; //保存左的符号 10 int n; 11 char s[10010]; //字符串 12 13 int main() 14 { 15 int i=0,ok; //ok标记 是否出现 ‘]'||')'||'empty()' 不匹配的情况。 16 char ch; 17 scanf("%d",&n); 18 getchar(); 19 while(n--) 20 { 21 ok=0; i=0; 22 while(!q.empty()) 23 q.pop(); 24 scanf("%s",s); 25 int len =strlen(s); 26 while(i<len) 27 { 28 if('('==s[i]||'['==s[i]) { q.push(s[i]); i++; } 29 else { 30 if(s[i]==']') 31 { 32 if(!q.empty()&&q.top()=='[') //如果栈为空后者栈定字符不等于'['时,表示不匹配 33 { 34 q.pop(); i++; 35 } 36 else 37 { 38 ok=1; break; 39 } 40 } 41 else 42 if(')'==s[i]) 43 { 44 if(!q.empty()&&q.top()=='(') //如果栈为空后者栈定字符不等于'('时,表示不匹配 45 { 46 q.pop();i++; 47 } 48 else 49 { 50 ok=1; break; 51 } 52 } 53 } 54 } 55 if(q.empty()&&!ok) //如果栈空并且标记为0的话 表示匹配 56 printf("Yes "); 57 else 58 printf("No "); 59 } 60 return 0; 61 }
刚开始用switch写超时,最后改成这样、时间大大改善、