栈对于括号匹配的应用,注意左括号多于右括号和左括号少于右括号情况的分别判断。
代码如下:
#include<string>
#include<iostream>
#include<stack>
using namespace std;
string str;
stack<char> punc;
bool flag = true;
int main(){
cin >> str;
for (int i = 0; i < str.size(); ++i) {
if (str[i] == '(') punc.push(str[i]);
else if (str[i] == ')' && !punc.empty()) punc.pop();
else if (str[i] == ')' && punc.empty()) {
flag = false; // 右括号多于左括号
break;
}
}
if (punc.empty() && flag) cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}