[アルゴリズム]Algospot BRACKETS 2


ソース:https://www.algospot.com/judge/problem/read/BRACKETS2

質問する


Best White is a mathematics graduate student at T1 University. Recently, he finished writing a paper and he decided to polish it. As he started to read it from the beginning, he realized that some of the formulas have problems: some of the brackets are mismatched! Since there are so many formulas in his paper, he decided to check their validity with a computer program.
The following kinds of brackets are included in Best White’s paper.
Round brackets are opened by a ( and closed by a ).
Curly brackets are opened by a { and closed by a }.
Square brackets are opened by a [ and closed by a ].
A formula is said well-matched when the following conditions are met:
Every bracket has a corresponding pair. ( corresponds to ), [ corresponds to ], et cetera.
Every bracket pair is opened first, and closed later.
No two pairs "cross"each other. For example, [(]) is not well-matched.
Write a program to help Best White by checking if each of his formulas is well-matched. To make the problem easier, everything other than brackets are removed from the formulas.

入力


The first line of the input will contain the number of test cases C (1≤C≤100). Each test is given in a single line as a character string. The strings will only include characters in "{}" (quotes for clarity). The length of the string will not exceed 10,000. しゅつりょく For each test case, print a single line "YES" when the formula is well-matched; print "NO" otherwise. (quotes for clarity) 正しいコード #include<bits/stdc++.h> #define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL) #define endl '\n' using namespace std; bool bracket(string& sen) { stack<char> st; for(int i=0; i < sen.size(); i++) { if(sen[i] == '(' || sen[i] == '{' || sen[i] == '[') st.push(sen[i]); else { if(st.empty()) return false; if(st.top()=='(' && sen[i]==')') { st.pop(); continue; } else if(st.top()=='{' && sen[i]=='}') { st.pop(); continue; } else if(st.top()=='[' && sen[i]==']') { st.pop(); continue; } return false; } } if(!st.empty()) return false; return true; } int main() { FASTio; int t; string a; cin >> t; while(t--) { cin >> a; if(bracket(a)) cout << "YES" << endl; else cout << "NO" << endl; } return 0; } 解答と思考過程 これは簡単な問題ですが、stackの要素と文字列を比較すると、stackが空であっても比較しようとしたため、実行時にエラーが発生しました。条件文に比較オブジェクトがない場合、関数はすぐにfalseを追加し、答え処理を完了します。