32. Longest Valid Parentheses
Posted Machelsky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32. Longest Valid Parentheses相关的知识,希望对你有一定的参考价值。
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.
思路:hard题确实不好想,参考了discussion。其实思路和maxsubarray一样,用一个globalmax来存最大值。从左到右遍历,碰到左边符号数量等于右边符号数量,计算长度(用一个prev pointer记录之前的位置),更新globalmax。情况不符,也就是左边符号数量少于右边符号数量,将pointer向右移一位(这个很重要),并且reset count和max。这道题比较tricky的地方在于一遍从左到右不够,需要从右到左再扫一遍。因为例如(()的情况,跳出循环但是max没有更新,其实max应该是2.所以要从右到左再扫一遍。
public class Solution { public int longestValidParentheses(String s) { if(s==null||s.length()==0) { return 0; } int count=0; int prev=0; int max=0; for(int i=0;i<s.length();i++) { if(s.charAt(i)==‘(‘) { count++; } else { count--; } if(count==0) { max=Math.max(i-prev+1,max); } if(count<0) { count=0; prev=i+1; } } int count2=0; int prev2=s.length()-1; for(int j=s.length()-1;j>=0;j--) { if(s.charAt(j)==‘)‘) { count2++; } else { count2--; } if(count2==0) { max=Math.max(prev2-j+1,max); } if(count2<0) { count2=0; prev2=j-1; } } return max; } }
以上是关于32. Longest Valid Parentheses的主要内容,如果未能解决你的问题,请参考以下文章