Longest Valid Parentheses

来源:互联网 发布:如何系统自学java 编辑:程序博客网 时间:2024/05/04 01:05

DP题,过程如下:计算出以每一个元素结尾所能形成的最长合法括号子串,其中最大值即为所求。时间复杂度,空间复杂度都是O(n)。

记当前位置下标为 i :

1,若 i 位置为 ' ( ' ,则dp[i] = 0;

2,若 i 位置为 ' ) ' :

判断位置 i-dp[i-1]-1 是否为 ' ( ':

若不是: dp[i] = 0;

若是:dp[i] = dp[i-1] + 2 + dp[i-dp[i-1]-2];当然需要控制边界。


class Solution {public:    int dp[100000];    int longestValidParentheses(string s) {        // Start typing your C/C++ solution below        // DO NOT write int main() functionif(s.size() == 0) return 0;dp[0] = 0;        int maxLen = 0;for(int i = 1; i < s.size(); i ++){if(s[i] == '(') dp[i] = 0;else{if(i-dp[i-1] >= 1 && s[i-dp[i-1]-1] == '(')                {dp[i] = dp[i-1] + 2;                    if(i - dp[i-1] >= 2) dp[i] += dp[i-dp[i-1]-2];                }else dp[i] = 0;}            if(dp[i] > maxLen)                maxLen = dp[i];}        return maxLen;    }};


原创粉丝点击