标签:
这道题好理解,但是要自己想的话还是很难想出来的,动态规划说白了就是记录当前的结果,留给后面的用。
求最长合法匹配的长度,这道题可以用一维动态规划逆向求解。假设输入括号表达式为String s,维护一个长度为s.length的一维数组dp[],数组元素初始化为0。 dp[i]表示从s[i]到s[s.length - 1] 包含s[i] 的最长的有效匹配括号子串长度。则存在如下关系:
class Solution { public: int longestValidParentheses(string s) { int len=s.size(); vector<int >res(len,0); int finalRes=0; for(int i = len-2;i>=0;i--) { if(s[i]==‘(‘) { int end=i + 1 + res[i + 1]; if(end<len&&s[end]==‘)‘) { res[i]=res[i+1]+2; if(end+1<len) res[i]+=res[end+1]; finalRes=max(finalRes,res[i]); } } } return finalRes; } };
标签:
原文地址:http://www.cnblogs.com/qiaozhoulin/p/4613220.html