东方博宜1486 - 括号匹配

题目描述

输入一个由()[]四种符号构成的字符串。判断其中的括号是否匹配,是,就输出yes,否则输出no。
比如:输入([])、([()])、[((()))]、()[][][]()[]这几个字符串(双引号内部的内容),我们都算是匹配的。
再比如:输入([)、([)]、([(]))这几个字符串,我们都认为是不匹配的。

输入

一个由()[]四种符号构成的字符串,字符串长度不超过 100。

输出

如果匹配,请输出yes,如果不匹配,请输出no。

样例

输入

([])

输出

yes

代码1

#include <iostream>
#include <stack>
using namespace std;

bool isMatching(string str) {
    stack<char> st;

    for (char c : str) {
        if (c == '(' || c == '[') {
            st.push(c);
        } else if (!st.empty() && ((c == ')' && st.top() == '(') || (c == ']' && st.top() == '['))) {
            st.pop();
        } else {
            return false;
        }
    }

    return st.empty();  // 栈为空表示所有括号都匹配成功
}

int main() {
    string str;
    cout << "请输入由括号构成的字符串:" << endl;
    cin >> str;

    if (isMatching(str)) {
        cout << "yes" << endl;
    } else {
        cout << "no" << endl;
    }

    return 0;
}

代码2

#include <iostream>
#include <string>
#include <stack>
using namespace std;

bool isMatching(string str) {
    stack<char> brackets;

    for (char c : str) {
        if (c == '(' || c == '[') {
            brackets.push(c);
        } else if (c == ')' || c == ']') {
            if (brackets.empty()) {
                return false;  // 出现右括号,但栈为空,不匹配
            }

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

            if ((c == ')' && top != '(') || (c == ']' && top != '[')) {
                return false;  // 出现右括号,但与栈顶的左括号不匹配
            }
        }
    }

    return brackets.empty();  // 所有的左括号都被匹配完毕
}

int main() {
    string str;
    cout << "请输入由括号构成的字符串:" << endl;
    cin >> str;

    if (isMatching(str)) {
        cout << "yes" << endl;
    } else {
        cout << "no" << endl;
    }

    return 0;
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值