题目链接

【题解】

设dp[i]表示以第i个字符结尾的最长有效括号的长度。
显然只要考虑s[i]==')'的情况
则如果s[i-1]=='(',则dp[i] = dp[i-2]+2;
如果s[i-1]==')',那么我们现在要在i前面去给s[i]==')'这个右括号去找左括号。
那么显然我们要先让s[i-1]这个右括号得到匹配。不然轮不到s[i].
所以我们先往前走dp[i-1]长度.
然后看看i-1-dp[i-1]是不是左括号(这时才能轮得上s[i],这里面其实还要求dp[i]真的是最长的有效括号长度才行,不然不能直接这样判断)
是的话我们就得到一个长度为dp[i-1]+2的有效序列了。
当然别忘了前面还有dp[i-1-dp[i-1]-1]要加上去因为也可能是合法的匹配序列。

【代码】

class Solution {
public:
int longestValidParentheses(string s) {
int dp[100000];
memset(dp,0,sizeof(dp));
int len = s.size();
int ans = 0;
for (int i = 0;i < len;i++){
if (s[i]==')'){
if (i-1>=0){
if (s[i-1]=='('){
if (i-2<0) dp[i] = 2;else
dp[i] = dp[i-2]+2;
}else{
//s[i-1]==')' if (i-1-dp[i-1]>=0&& s[i-1-dp[i-1]]=='('){
dp[i] = dp[i-1]+2;
if (i-1-dp[i-1]-1>=0){
dp[i]+=dp[i-1-dp[i-1]-1];
}
}
}
}
}
ans = max(ans,dp[i]);
}
return ans;
}
};

最新文章

  1. Linux内核启动过程概述
  2. ecshop 活动-》红包
  3. 读取XML文件
  4. Linux安装mysql最新版本纪要
  5. centos6.6 安装 LXC
  6. css盒子模型 padding
  7. 关于javascript在作用域中的变量定义你所不知道的一些东西
  8. hdu 2096
  9. 关于linux下rar文件的解压缩操作
  10. 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算
  11. [LOJ2230][BJOI2014]大融合
  12. python 虚拟环境使用与管理(virtualenv)
  13. Android Jetpack 组建介绍(二)——Lifecycler
  14. JVM(二)—— 垃圾回收
  15. vc++2010如何新建项目并在控制台打印helloworld
  16. spring-cloud-config-server——Environment Repository
  17. Delphi TXLSReadWriteII导出Excel
  18. 1月4日笔记 vi编辑器
  19. SCCM2012 R2实战系列之五:发现方法
  20. [Unity算法]斜抛运动(变种)

热门文章

  1. 比传统事务快10倍?一张图读懂阿里云全局事务服务GTS
  2. paper 159:文章解读:From Facial Parts Responses to Face Detection: A Deep Learning Approach--2015ICCV
  3. vue之条件语句小结
  4. POI 讀取EXCEL
  5. laravel 中url使用
  6. Linux(Ubuntu)常用命令(二)
  7. git使用记录三:查看日志
  8. FastReport.net 使用 Winform WebForm打印
  9. 牛客网练习赛 2 烟花(概率dp)
  10. Introduction to Object-Oriented JavaScript 转载自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript