LeetCode-32.Longest Valid Parentheses最长有效括号子串
来源:互联网 发布:淘宝公告栏素材 编辑:程序博客网 时间:2024/05/21 04:15
问题描述:Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
For “(()”, the longest valid parentheses substring is “()”, which has length = 2.
Another example is “)()())”, where the longest valid parentheses substring is “()()”, which has length = 4.
大致意思就是,给定一个只含有“(”和“)”的字符串,找出里面最长的有效子串的长度。
解决思路:考虑以字符串从0到n-1每一个字符结尾的最长有效子串的长度,然后返回最大值。
- 如果以“(”结尾,那么这肯定不是一个有效子串,故长度为0
- 如果以“)”结尾:那么就考虑 i 前面的最长有效子串
假设整形数组dp[]记录着每个位置结尾的最长有效子串的长度
假设图中的五个圈是五个有效子串,由上图和上表可以看出,如果要求 i+1 位置结尾的最长有效子串,那么首先要求出从 i 位置结尾,j 位置开头的有效子串,如果 j-1 位置刚好与 i+1 位置相匹配,那么以 i+1 结尾的有效子串就是从 j-1 位置到 i+1 位置,即 dp[i]+2 。但是,由于我们要求的是最长有效子串,如果 j-2 结尾的也是有效子串,即 j-2 == k ,那么,按照上面的方法就少加了一段,所以还要加上dp[ j-2 ],这样才能算是以 i+1位置结尾的最长有效,即 dp[ i+1 ]=dp[ i ]+2+dp[ j-2 ]。
代码如下:
public class Solution { public int longestValidParentheses(String s) { if(s==null||s.equals("")){ return 0; } char[] chs=s.toCharArray(); int[] dp=new int[chs.length];//以某个位置结尾的最长子数组的长度,整形数组的初始值就是0 int pre=0;//pre是i前面最长子数组前面的一个下标,判断pre和i是否匹配 int len=0; for(int i=1;i<chs.length;i++){ if(chs[i]==')'){ pre=i-dp[i-1]-1; if(pre>=0&&chs[pre]=='('){ dp[i]=dp[i-1]+2+(pre>0?dp[pre-1]:0); } } len=(dp[i]>len?dp[i]:len); } return len; }}
- LeetCode-32.Longest Valid Parentheses最长有效括号子串
- LeetCode 32. Longest Valid Parentheses(最长有效括号)
- LeetCode----32. Longest Valid Parentheses(最长有效括号)
- leetcode 32. Longest Valid Parentheses 最长有效括号长度
- LeetCode: Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- 最长连续有效括号 Longest Valid Parentheses @LeetCode
- LeetCode--Longest Valid Parentheses(最长有效的括号)
- LeetCode | Longest Valid Parentheses(最长有效的括号匹配)
- LeetCode OJ 之 Longest Valid Parentheses (最长有效括号)
- LeetCode 32 Longest Valid Parentheses(最长有效括号)(*)
- Longest Valid Parentheses 最长的有效括号
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- 求最长有效匹配括号子串的长度(Longest Valid Parentheses)
- Longest Valid Parentheses(最长有效括号串)
- Leetcode刷题记——32. Longest Valid Parentheses(最长有效括号)
- LeetCode | 32. Longest Valid Parentheses——最长有效括号匹配长度
- my.cnf互为主从推荐配置
- C++面试中容易问到的知识点
- Android-五子连珠(一)-效果图
- Python3教程Web开发实战梳理-day8(构建前端)
- 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- LeetCode-32.Longest Valid Parentheses最长有效括号子串
- VS2012的Web.config中使用machineKey
- 2016年大数据80篇爆款文章:这一年你追过的那些技术
- 【leetcode medium】2. Add Two Numbers
- / 与 //在Python3.0中的区别
- 【dp专题1】B
- 多线程——消费者与生产者案例
- 目录遍历的三种方法
- MQTT协议 格式