题目描述
给出一个括号序列(包含大中小括号),不能反套(即不能小括号里套大括号或中括号,但是正套可以,然后小括号套小括号也是可以的,现在给出一个括号序列,问你它是否合法(不合法要么有反套,要么有不配对
样例输入
6
{[()]()[()]}
()()[()]{[()]}
([])
[(()(]
()[()]
{()()[]}
样例输出
YES
YES
NO
NO
YES
YES
思路
直接暴力配对(遇见一个没处理过的左括号就一直往后搜,如果出现反套或者最后配对不到就直接输出NO
最后配对完了之后还得再判断有没有右括号是没有被配对的
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int len, n;
bool b[1005], pd;
char s[10005];
void work(int x)
{
char cc = s[x], tt = ' ';
for(int i = x + 1; i <= len; ++i)
{
if(b[i