维护一个字符栈存放左括号。遍历字符串,左括号压入栈中,遇到右括号弹出栈首字符配对,不是一对直接返回false。最后当栈为空时(没有多余符号),返回true。
#include <iostream>
#include <stack>
using namespace std;
int main() {
string s;
cin >> s;
int idx = 0;
stack<char> k;
while (idx < s.length()) {
if (s[idx] == '(' || s[idx] == '[') {
k.push(s[idx]);
}
if (s[idx] == ')' || s[idx] == ']') {
if (k.empty()) {
cout << "false";
return 0;
}
else {
char t = k.top();
if ((s[idx] == ')' && t != '(') || (s[idx] == ']' && t != '[')) {
cout << "false";
return 0;
}
k.pop();
}
}
idx++;
}
if (k.empty()) {
cout << "true";
}
else cout << "false";
return 0;
}