题目链接:https://cn.vjudge.net/problem/UVALive-8078

题意

括号序列T是这样定义的:

  1. T是个空的
  2. T是(T), {T}, 或者 [T]
  3. T是两个T组成的,比如()()就是一个T

现在给一个n个字符长的串,问以每个字符为左端点的最长括号序列是多长。

思路

显然对i这个地方可以讨论一下:

如果i是个右括号,答案是0。

如果i是个左括号:

如果以i+1为起点的最长串后边的字符与左括号匹配,答案是加上这个字符后边的最长串。

如果不匹配,答案是0。

细节上注意不要越界即可,边界是dp[strlen]=0

提交过程

AC

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=2e5;
char str[maxn];
int sign[300], ans[maxn]; int main(void){
int T, kase=0; sign['(']=1;
sign['{']=2;
sign['[']=3;
sign['<']=4;
sign[')']=-1;
sign['}']=-2;
sign[']']=-3;
sign['>']=-4;
scanf("%d", &T);
while (T--){
scanf("%s", str); memset(ans, 0, sizeof(ans));
int len=strlen(str);
for (int i=len; i>=0; i--){
int elem=sign[str[i]]; if (elem<0) ans[i]=0;
else{
if (i+1<len && sign[str[i+1]]==elem*-1) ans[i]=2+ans[i+2];
else if (i+1<len){
int nxt=sign[str[ans[i+1]+i+1]];
// printf("%d %d --\n", nxt, elem);
if (nxt==elem*-1) ans[i]=ans[i+1]+2+ans[i+ans[i+1]+2];
else ans[i]=0;
}else if (i+1>=len) ans[i]=0;
}
} printf("Case %d:\n", ++kase);
for (int i=0; i<len; i++)
printf("%d\n", ans[i]);
} return 0;
}
Time Memory Length Lang Submitted
49ms None 1116 C++ 5.3.0 2018-08-24 11:28:32

最新文章

  1. 每天一个设计模式-4 单例模式(Singleton)
  2. 调试一个socket通信bug的心理过程和反思
  3. Java内存区域
  4. OGLplus 0.33.0 发布,OpenGL 的 C 封装库
  5. python--类方法、对象方法、静态方法
  6. 前端之JavaScript
  7. linux 打开文件数 too many open files 解决方法
  8. CSS3 @font-face详细用法(转)
  9. structs2标签
  10. Weex 开发入门
  11. Linux学习之chkconfig命令
  12. 一道月薪3W的java面试题 (小明和小强都是张老师的学生,张老师的生日是某月某日,2人都不知道张老师的生日)
  13. redis作为mysql的缓存服务器(读写分离) (转)
  14. JS中获取页面单选框radio和复选框checkbox中当前选中的值
  15. Xshell 的安装教程
  16. 【转载】小结一下linux 2.6内核的四种IO调度算法
  17. HDU1348 Wall 凸包
  18. 深度剖析malloc、free和new、delete
  19. Anveshak: Placing Edge Servers In The Wild
  20. reactive stream: 响应式编程

热门文章

  1. P1111 修复公路 (prim)
  2. 01.Python基础-5.函数
  3. 提高生产力:Web开发基础平台WebCommon的设计和实现
  4. ioremap映射函数
  5. css 超出宽度出现省略号
  6. LCA【模板】
  7. [Design]Adobe CS6 2%错误问题
  8. PHP 7给我震撼
  9. 全屏滚动实现:fullPage.js和fullPage
  10. HDU 1754(线段树区间最值)