小马智行9.20 第四题
第四题提交的时候有问题,现在修改了一下,自己写了测试用例也过了,请大家看看还有没有没考虑到的地方,请帮忙提点建议
#include<iostream> #include<vector> #include<string> #include<unordered_map> #include<stack> using namespace std; int main() { int n; cin >> n; vector<string> s; for (int i = 0; i < n; i++) { string tem; cin >> tem; s.push_back(tem); } unordered_map<char,char> m; m[')'] = '('; m[']'] = '['; for (int i = 0; i < n; i++) { string t = s[i]; int len = t.length(); stack<char> c; stack<char> k; int flag = 1; for (int j = 0; j < len; j++) { if ((t[0] != '(') || (t[j] == '[' && j < len - 1 && t[j + 1] != '(') || (t[j] == ',' && j < len - 1 && t[j + 1] != '(')) { flag = -1; break; } if (t[j] == ',') c.push(t[j]); if (c.size() > 1) { flag = -1; break; } if (t[j] == '[' || t[j] == ']') { while (!c.empty()) c.pop(); } if (t[j] == '(' || t[j] == '[') k.push(t[j]); if (t[j] == ')' || t[j] == ']') { if (k.top() == m[t[j]]) k.pop(); } } if (!k.empty()) { flag = -1; while (!k.empty()) k.pop(); } if (flag > 0) cout << 1 << '\n'; else cout << 0 << '\n'; } return 0; }
输入:
5
(123)
(12)[23]
(1)[(2)[(3),(4)]]
(123)
(12)[23]
(1)[(2)[(3),(4)]]
1[(2)]
(1)[(2),(3),(4)]
期望输出:
期望输出:
1
0
1
0
0