Parentheses Balance UVA - 673
阿新 • • 發佈:2018-12-08
//剛開始覺得這道題挺簡單的....結果一直總是處理不完結果是No 的資料..(沒輸出) 。。。。後來發現stack的empty也得加上,不能直接判斷棧頂元素與此時陣列元素相等,將錯誤的附在第二個程式碼上
//AC
#include<iostream> #include<stack> #include<string> using namespace std; int main() { int n; cin>>n; string str1; getline(cin,str1); while(n--) { string str; stack<char> s; int i,flag=1; getline(cin,str); for(i=0;i<str.size();i++) { if(str[i]=='(') { s.push(str[i]); } else if(str[i]=='[') { s.push(str[i]); } else if(str[i]==')') { if(!s.empty() && s.top()=='(') { s.pop(); } else { flag=0; break; } } else if(str[i]==']') { if(s.empty() || s.top()!='[') { flag=0; break; } else { s.pop(); } } } if(!s.empty()) flag=0; if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
//RE
#include <iostream> #include <stack> using namespace std; stack<char> a; stack<char> b; int main() { int n; cin >> n; for(int i=0; i<n; i++){ char t; int j=0, flag = 0; //while(cin >> t && t != '\n') string s; cin >> s; while(s[j]) { t = s[j]; if(t == '(' || t == '['){ a.push(t); } else if(t == ')') { if (a.top() == '(') { a.pop(); } else{ flag = 1; break; } } else if(t == ']'){ if (a.top() == '['){ a.pop(); } else{ flag = 1; break; } } j++; // cout << j << endl; } // cout << a.empty() << " " << b.empty() << endl; if(flag == 0 && a.empty()){ cout << "Yes" << endl; } else cout << "No" << endl; //清空stack while(!a.empty()) a.pop(); // while(!b.empty()) // b.pop(); } return 0; }