Loading... > 苗苗今天刚刚学会使用括号,不过他分不清小括号,中括号,大括号和尖括号,不知道怎么使用这些括号,请帮助他判断括号使用是否正确。 > > 注意:不需要区分括号的优先级。 输入格式 共一行,包含一个由 <, (, {, [, >,), },] 构成的字符串。 输出格式 如果输入的字符串中的括号正确匹配则输出 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; } ``` 最后修改:2023 年 08 月 06 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏