32. Longest Valid Parentheses
来源:互联网 发布:他知而自不知的我属于 编辑:程序博客网 时间:2024/06/07 05:09
iven 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.
解法一:栈
第一遍循环遍历,找到所有非法的字母符号所在的下标并存入栈中,如果有n个这样的字符,那么它们把s分割成了n+1个子字符串,只要找到最长的字字符串,就是最长的有效括号。
int longestValidParentheses(string s) { stack<int> stk; int n=s.size();
//第一次遍历,写入栈中非法括号的下标 for(int i=0;i<s.size();i++) { if(s[i]=='(') { stk.push(i); }else { if(stk.size()>0&&s[stk.top()]=='(') stk.pop(); else stk.push(i); } } if(stk.empty()) return n; int maxcnt=0,idx=n; while(!stk.empty()) { maxcnt=max(maxcnt,idx-stk.top()-1); idx=stk.top(); stk.pop(); } maxcnt=max(maxcnt,idx);//不要忘记第一个子字符串的长度 return maxcnt; }
解法2:动态规划
dp[i]:表示以s[i]结尾的最长有效的括号。
当s[i]=‘(’,dp[i]=0,因为一个有效的括号串不能以其结尾。
当s[i]=‘)'时,s[i-1]==‘(’,此时的'xxx()'是有效的,只要dp[i-2]+2;s[i-1]==')',xxX(xxx)),只有当'X'==‘)’时,有效,此时为
dp[i]=2+dp[i-1]+dp[i-dp[i-1]-2]。
int longestValidParentheses(string s) { int n=s.size(); vector<int> dp(n,0); int i,maxlen=0; for(i=1;i<n;i++) { if(s[i]==')') { if(s[i-1]=='(') { dp[i]=2+(i-2>=0?dp[i-2]:0); maxlen=max(maxlen,dp[i]) ; }else { if(i-dp[i-1]-1>=0&&s[i-dp[i-1]-1]=='(') dp[i]=2+dp[i-1]+(i-dp[i-1]-2>=0?dp[i-dp[i-1]-2]:0); maxlen=max(maxlen,dp[i]); } } } return maxlen; }
0 0
- 32.Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses
- 将FCKeditor文本编辑器添加到javaweb项目中
- (HDU 5775)Bubble Sort <树状数组> 多校训练4
- bzoj【Kirchhoff矩阵】
- 数组+链表 = [骗分]块状链表
- C#图解教程 第五章 方法
- 32. Longest Valid Parentheses
- Java集合框架综述
- c语言基本数据类型short、int、long、char、float、double
- Java的反射
- 七天使的通讯(angelus)
- strcpy()源代码
- 《程序员的自我修养》--目标文件有什么和ELF文件格式简述
- Cogs 1688. [ZJOI2008]树的统计Count(树链剖分+线段树||LCT)
- 顺序表和链表的比较