题解 | 括号配对问题

括号配对问题

https://www.nowcoder.com/practice/57260c08eaa44feababd05b328b897d7

#include <iostream>
#include <vector>
#include <stack>
#include <string>

using namespace std;

bool isValidBracketSequence(const string& s) {
    vector<char> brackets;

    // 1. 提取所有括号字符
    for (char c : s) {
        if (c == '(' || c == ')' || c == '[' || c == ']') {
            brackets.push_back(c);
        }
    }

    stack<char> stk;
    // 2. 检查括号序列是否合法
    for (char bracket : brackets) {
        if (bracket == '(' || bracket == '[') {
            // 如果是左括号,压入栈
            stk.push(bracket);
        } else {
            // 如果是右括号
            if (stk.empty()) {
                // 栈为空,但遇到了右括号,说明没有匹配的左括号
                return false;
            }

            char top = stk.top();
            stk.pop();

            // 检查括号是否匹配
            if ((bracket == ')' && top != '(') ||
                    (bracket == ']' && top != '[')) {
                return false;
            }
        }
    }

    // 3. 遍历结束后,栈必须为空才是完全匹配
    return stk.empty();
}

int main() {
    string input;
    getline(cin, input);

    bool result = isValidBracketSequence(input);
    cout << (result ? "true" : "false") << endl;

    return 0;
}

全部评论

相关推荐

程序员牛肉:继续沉淀吧同学,你这就是纯纯的流水线产品。 差不多的学历+两个烂大街项目。自身学历又不行,现在找啥实习呢。有点太浮躁了。多花点心思搞搞ai,开源和八股。这比你这段时间捣鼓一段小厂实习要好得多;
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务