{([()]{})}
YES
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
bool ok(string &s) {//寫一個判斷括號匹配合法的函數
stack<char> S;//定義字元棧
for (auto c:s) {//auto回圈方便遍歷
if (c == '(' || c == '[' || c == '{')S.push(c);//如果是左括號就進棧
if (c == ')') {//如果是右括號
if (S.empty() || S.top() != '(')return false;//先過濾掉棧爲空和棧頂不爲相應左括號的情況
S.pop();//再移出棧
}
if (c == ']') {
if (S.empty() || S.top() != '[')return false;
S.pop();
}
if (c == '}') {
if (S.empty() || S.top() != '{')return false;
S.pop();
}
}
return S.empty();//返回棧爲空
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
for(string s;cin>>s;){//回圈輸入字串,題目要求多組輸入,若給出固定組數,再回圈前定義輸入即可
if (ok(s)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
1.本題首先要知道哪些條件纔可以判斷合法的匹配
2.然後理好思緒每一步要實現的內容
3.正確使用棧
4.操作過程中倘若有誤,一定要多測試,實踐出真知,有時可以用cerr代替cout來輸出表示測試的數據。