【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;
}