维护一个字符栈存放左括号。遍历字符串,左括号压入栈中,遇到右括号弹出栈首字符配对,不是一对直接返回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;
}