苗苗今天刚刚学会使用括号,不过他分不清小括号,中括号,大括号和尖括号,不知道怎么使用这些括号,请帮助他判断括号使用是否正确。

注意:不需要区分括号的优先级。

输入格式 共一行,包含一个由 <, (, {, [, >,), },] 构成的字符串。

输出格式 如果输入的字符串中的括号正确匹配则输出 yes ,否则输出 no 。

数据范围 输入字符串长度不超过 10000 。

输入样例:

() {}

输出样例:

yes

题目分析

这道题的目标是判断一个字符串中的括号是否正确匹配。我们可以使用栈来解决这个问题。

首先,我们定义一个栈 st 来存储括号。然后,我们遍历字符串中的每个字符。对于每个字符,如果它是一个左括号,则将它压入栈中;否则,如果它是一个右括号,则检查栈顶元素是否与它匹配。如果栈顶元素与当前字符匹配,则将栈顶元素弹出;否则,说明括号不匹配,输出 no 并结束程序。

在遍历完字符串后,如果栈为空,则说明所有括号都正确匹配,输出 yes;否则,说明括号不匹配,输出 no

代码实现

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

string s;
stack <char> st;
unordered_map <char, char> mp = {
    {'<','>'},{'{','}'},{'[',']'},{'(',')'}
};
int main () {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> s;
    for (auto& c : s) {
        if (st.empty()) st.push(c);
        else {
            if (mp[st.top()] == c) st.pop();
            else st.push(c);
        }
    }
    cout << (st.empty() ? "yes" : "no"); 
    return 0;
}
分类: Stack

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

友情链接:Ctips' blog, Colza’s blog

站点状态:Status