【P1241 括号序列】
题目理解难度大,要求是对每一个右括号找到最近的左括号。
如果不匹配,比如:右括号‘)’,但是找到的左括号是'[')或者没找到就放弃。也就是说,题目是要求首先满足找到一个左括号这个条件。
再判断是否匹配,如果匹配的话,在当前位置做个标记,有标记的直接输出,没有标记的就输出一个完整的左右括号。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <stack>
int is[105];
char ch[105];
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin >> ch;
for (int i = 0; i <= strlen(ch); ++i)
{
if (ch[i] == ']')
{
for (int j = i - 1; j >= 0; --j)
{
if (!is[j] && ch[j] == '[')
{
is[i] = is[j] = 1;
break;
}
else if (!is[j] && ch[j] == '(')
{
break;
}
}
}
else if (ch[i] == ')')
{
for (int j = i - 1; j >= 0; --j)
{
if (!is[j] && ch[j] == '(')
{
is[i] = is[j] = 1;
break;
}
else if (!is[j] && ch[j] == '[')
{
break;
}
}
}
}
for (int i = 0, len = strlen(ch); i < len; ++i)
{
if (is[i])
putchar(ch[i]);
else
{
if (ch[i] == '(' || ch[i] == ')')
printf("()");
else if (ch[i] == '[' || ch[i] == ']')
printf("[]");
}
}
return 0;
}