P1241 括号序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
注意样例:输入:( [ ) ] )
输出:( [ ( ) ] )
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <map>
#include <cmath>
#include <queue>
#include <stack>
#define cinios (ios::sync_with_stdio(false), cin.tie(0), cout.tie(0))
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;
const ll N = 1e5 + 10, M = 1e5 + 1, null = 0x3f3f3f3f;
const int P = 131;
char s[105];
int num[105];//未匹配成功的左括号下标
int flag[105];//未匹配成功的括号
int idx;
map<char, char>mp{ {'(',')'}, {'[',']'} , {')','('},{']','['} };
int main() {
cinios;
cin >> s + 1;
idx = 0;
for (int i = 1; i <= strlen(s + 1); i++)
{
if (s[i] == '(' || s[i] == '[') num[++idx] = i, flag[i] = 1;
else
{
if (idx >= 1 && mp[s[num[idx]]] == s[i])//匹配成功
{
flag[num[idx]] = 0;
idx--;
}
else flag[i] = 1;
//else num[++idx] = i;
//不能加这句,否则匹配环节会匹配到右括号从而导致匹配错误
}
}
int h = 1;
for (int i = 1; i <= strlen(s + 1); i++)
{
if (flag[i])
{
if (s[i] == '(' || s[i] == '[') cout << s[i];
cout << mp[s[i]];
if (s[i] == ')' || s[i] == ']') cout << s[i];
h++;
}
else cout << s[i];
}
return 0;
}
/*
*/