算法竞赛进阶指南,90页,栈
本题要点:
1、 用栈来模拟,
1)遇到左括号,直接入栈;
1)遇到右括号,如果栈顶的括号与之配对,则弹出栈顶的括号;
如果不配对,则将右括号入栈(这个右括号不可能有配对的左括号了)
2、求最长的括号序列:
每个括号都有一个id号(在字符串中的顺序), 右括号(当前 now)与栈顶括号配对时候, 先弹出栈顶的左括号,
此时栈顶(top) 的id和 now 的id之差,就是美观序列的长度;
//当然,注意栈为空的情况
#include <cstdio>
#include <cstring>
#include <iostream>
#include <stack>
using namespace std;
const int MaxN = 100010;
char str[MaxN];
struct Blacket
{
int id;
char ch;
}blackets[MaxN];
bool is_right(char ch) //判断是否是右括号
{
return ch == ')'