leetcode Longest Valid Parentheses
2016-05-29 10:57
387 查看
这道题的目标是求一个仅含左右括号的字符串中,最长连续的有效匹配长度。
例如((())是4,()(()是2,等等。
说是动态规划…其实我觉得不至于,不过递推形式和DP有些类似,上代码。
例如((())是4,()(()是2,等等。
说是动态规划…其实我觉得不至于,不过递推形式和DP有些类似,上代码。
class Solution { public: int longestValidParentheses(string s) { int n = s.size(); int max = 0, p=-1; int *st = new int , *L = new int ; // st是一个栈,栈顶元素为"当前配对的左括号的下标" // L[i]为s[0...k]中包含字符s[k]的最长匹配长度 // 即s[0...k]最长匹配后缀的长度 for(int i=0;i<n;i++) { L[i] = 0; // 初始化 // 左括号不可能是某个匹配的结尾,所以L[i]=0 if(s[i] == '(') st[++p] = i; else if(s[i] == ')') { if(p>=0) { // 称形如"(())"的后缀为连续匹配段,则 // L[st[p]-1]是当前连续匹配段之前已有的长度 // L[i-1]是当前连续匹配段的长度 if(st[p]-1>0) L[i] = L[st[p]-1]+L[i-1]+2; else L[i] = L[i-1]+2; p--; } else { L[i] = 0; } } if(L[i] > max) max = L[i]; } delete[] L; delete[] st; return max; } };
相关文章推荐
- Android 最佳性能实践之内存管理(一)
- 分页方法
- leetcode #51
- 总结linux清理垃圾命令
- 客户端架构
- poj 1011 Sticks(dfs+剪枝)
- go语言的模板,text/template包
- 一个简单的php路由类
- Android 基础总结:(五)Service详解(上)
- Docker 常用命令
- WEB服务健康状态检测
- 另眼观宝岛之一
- 常规功能和模块自定义系统 (cfcmms)—048模块导航功能的重构(6)以后的设想
- 第9周项目2- 我的数组类
- 编程读取ELF文件头
- HDMI EDID解读
- 《大神在耳边》身世史上最抠编导组 雅雅、29盗窃袭南京黄花不保?
- QuickHit
- 将接收的二进制流转换成图片保存
- osg创建简单图元(2)