P1944 最长括号匹配_NOI导刊2009提高

题解

宁愿相信世上有鬼,也不能随便相信某谷题目标签

我想了半天然后看了眼题解,发现用栈来模拟就好了

栈来模拟,还要用到一个bool数组,标记是否已经匹配 use[ i ]

一串括号,入栈,遇到匹配的就弹出去,标记已经匹配,然后最后挑连续匹配的最大的就好了,因为题目要求子串

注意两个点:

1.q[top]数组存的是括号的标号,而不是top是存的括号标号

2.res记录暂时一共有多少个连续的匹配括号数,所以每遇到一个新的括号,都要更新一遍

具体可以结合代码

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue> using namespace std; typedef long long ll; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} const int maxn=1e6+;
char s[maxn];
bool use[maxn];
int top=,q[maxn];
int l,r,ans=,res=,l1=,r1=; int main()
{
scanf("%s",s+);
int len=strlen(s+);
memset(use,,sizeof(use));
for(int i=;i<=len;i++){
if((s[q[top]]=='('&&s[i]==')')||(s[q[top]]=='['&&s[i]==']')){
use[q[top--]]=;
use[i]=;
}
else{
q[++top]=i;
}
}
for(int i=;i<=len;i++){
if(!use[i]){
if(res>ans) ans=res,l=l1,r=r1;
res=; //不可以放到if里面
}
else{
if(res==) l1=r1=i;
else r1++;
res++; //不可以放到if里面
}
}
if(res>ans) ans=res,res=,l=l1,r=r1;
for(int i=l;i<=r;i++) printf("%c",s[i]);
return ;
}

一开始自己Hank自己然后就被自己 Hank si 了

1.())[]())[]

2.())[]([(][()]]()

最新文章

  1. Ubuntu raid5+lvm实验
  2. Python开源框架
  3. 谈谈Lucene和Solr索引存目录
  4. CentOS6.5 本地源搭建Ceph
  5. 探秘空值位图掩码(NULL bitmap mask)
  6. java新手笔记26 Frame
  7. Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触
  8. JSP学习笔记(三):简单的Tomcat Web服务器
  9. Oracle中使用透明网关链接到Sqlserver[Z]
  10. OC中最难的一部分内容:内存管理
  11. Week1(9月12日):很激动的第一次课
  12. linux 虚拟文件系统
  13. Button重写onClick两种方式
  14. C语言的格式符
  15. Docker 入门篇
  16. JZOJ5431 捕老鼠
  17. webpack创建页面的过程
  18. Linux 开机启动 php socket
  19. .htaccess 配置
  20. 如何实现一个Java Class 解析器

热门文章

  1. 解决spring-boot-maven-plugin插件打包,springboot启动时报找不到主main问题
  2. 纪念一下,时隔多年,继delphi上成功运行sql之后
  3. springboot和Redis集群版的整合
  4. 【问题】No manual entry for pthread_create in section 3
  5. 什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain model)有什么区别
  6. Ajax长连接和SignalR(刷新客户端数据)的区别
  7. Jupyter Notebook 插件安装
  8. 【转】BSON数据格式
  9. [ 转载 ]hashCode方法的相关用法
  10. Selenium(四)使用xpath定位元素