LeetCode 32. Longest Valid Parentheses(hard)
来源:互联网 发布:优惠券制作软件 编辑:程序博客网 时间:2024/06/11 04:35
题目描述
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.
Subscribe to see which companies asked this question
Show Tags
Show Similar Problems
题目解析
从给定字符串中找出最长的合法串的长度。
开始时我的思路错了,用的逻辑如下:
c[i][j]代表以i,j为两端的子串是否为合法串。下标从0开始,类Python的切片规则。
c[i][j] = s[i]==’(’ && s[j-1]==’)’ && c[i+1][j-1];
or c[i][j] = c[i][k]*c[k][j];
以字符串长度为主序循环,不过这样的时间复杂度到了O(n^3),超时。
看了别人O(n)时间复杂度的方法,逻辑如下:
以s[i]为结尾的最长合法串长度longest[i];
if s[i]==’(’ then longest[i] = 0;
if s[i]==’)’ && s[i-1]==’(’ then longest[i]=longest[i-2]+2;
if s[i]==’)’ && s[i-longest[i-1]-1]==’(’ then longest[i]=longest[i-1]+2;
longest[i]+=longest[i-longest[i]];
代码
class Solution {public: int longestValidParentheses(string s) { int m=s.size(),ans=0; if(m==0) { return 0; } vector<vector<bool> >c(m+1,vector<bool>(m+1,false)); for(int i=0;i<=m;i++) { c[i][i]=true; } for(int len=2;len<=m;len+=2) { for(int i=0;i+len<=m;i++) { if(s[i]=='('&&s[i+len-1]==')'&&c[i+1][i+len-1]) { c[i][i+len]=true; ans=len; continue; } int k=i+2; while(k<i+len) { if(c[i][k]) { break; } k+=2; } if(k<i+len&&c[k][i+len]) { c[i][i+len]=true; ans=len; } } } return ans; }};
- LeetCode 32. Longest Valid Parentheses(hard)
- Leetcode 32. Longest Valid Parentheses (Hard) (cpp)
- leetcode hard模式专杀之32. Longest Valid Parentheses
- [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)
- Hard-题目36:32. Longest Valid Parentheses
- LeetCode --- 32. Longest Valid Parentheses
- LeetCode 32.Longest Valid Parentheses
- [Leetcode] 32. Longest Valid Parentheses
- [LeetCode]32.Longest Valid Parentheses
- [leetcode]32.Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- LeetCode 32. Longest Valid Parentheses
- [leetcode] 32. Longest Valid Parentheses
- LeetCode 32. Longest Valid Parentheses
- LeetCode-32.Longest Valid Parentheses
- leetcode.32. Longest Valid Parentheses
- 【leetcode】32. Longest Valid Parentheses
- icpc大连栈
- python pil安装
- 1096. Consecutive Factors
- 排列组合问题初步
- NOIP历年搜索整理
- LeetCode 32. Longest Valid Parentheses(hard)
- 多态,抽象类,接口,UML图
- 为button添加href
- MySQL学习笔记
- Android 观察者模式
- 写wal log日志
- 2016秋季练习
- html-css
- 事件分发机制(一)