测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A46343. 奇怪的括号

填空题 困难

题目描述

奇怪的括号

题目描述

某天小A和同学在课堂上讨论到:“栈这种数据结构真是太优美了,既简单用途又广泛。”小B仰慕

小A许久,于是他拿出了自己在网上抄写的一道题问小A,如何判断括号是否匹配呢

输入

多组数据,每组数据占一行,且都是由(、)、[、]、*、/这六种字符组成。

输出

每组数据输出一行,如果括号能匹配成功,输出True,否则输出False。括号匹配规则是: ( 和 ) 匹配 [ 和 ] 匹配 /* 和 */ 匹配 如果含有冗余字符也算匹配失败,例如 /***/ 是匹配失败的因为中间多了一个*。

样例输入

()/*[()]*/

*/**/

样例输出

True

False

参考答案

#include <bits/stdc++.h> using namespace std; string s; int main() { while (cin >> s) { stack<char> st; for (int i = 0; i < s.size(); i++) { if (st.empty()) { st.push(s[i]); } else { if (s[i] == ')' && st.top() == '(') st.pop(); else if (s[i] == ']' && st.top() == '[') st.pop(); else if (s[i] == '/' && st.top() == '*' && st.size() >= 3) { st.pop(); char a = st.top(); st.pop(); char b = st.top(); st.pop(); if (!(a == '*' && b == '/')) { st.push(b); st.push(a); st.push('*'); } } else st.push(s[i]); } } if (st.empty()) cout << "True" << endl; else cout << "False" << endl; } return 0; }
上一题 下一题