定义如下规则:
例如,下面的字符串都是平衡括号序列:
(),[],(()),([]),()[],()[()]
而以下几个则不是:
(,[,],)(,()),([()
现在,给定一个仅由 (,),[,]构成的字符串 sss,请你按照如下的方式给字符串中每个字符配对:
配对结束后,对于 sss 中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。
输入只有一行一个字符串,表示 sss。
输出一行一个字符串表示你的答案。
([()
()[]()
([)
()[]()
对于全部的测试点,保证 sss 的长度不超过 100,且只含 (,),[,] 四个字符。
#includeusing namespace std;string s;
stack sta;//存下标
int vis[105];//标记每个字符是否匹配int main() {cin >> s;for (int i = 0; i < s.size(); ++i) {//左括号进栈if (s[i] == '(' || s[i] == '[') {sta.push(i);} else {//右括号,先判断栈内是否有匹配if (s[i] == ')' && !sta.empty() && s[sta.top()] == '(') {//栈顶匹配vis[i] = 1;vis[sta.top()] = 1;sta.pop();}if (s[i] == ']' && !sta.empty() && s[sta.top()] == '[') {//栈顶匹配vis[i] = 1;vis[sta.top()] = 1;sta.pop();}}}for (int i = 0; i < s.size(); ++i) {if (vis[i])cout << s[i];else {//直接输出一对if (s[i] == '(' || s[i] == ')')cout << "()";elsecout << "[]";}}return 0;
}