参考: 1. https://leetcode.com/problems/longest-valid-parentheses/solution/
2. https://blog.csdn.net/accepthjp/article/details/52439449
知道是用动态规划解决,但是写不出状态转移方程。。。
最后查看官方solution,理解了状态转移方程的由来!
1 class Solution { 2 public: 3 int longestValidParentheses(string s) { 4 s = ")" + s; 5 // 在s前添加')'可以省去判断下标是否越界 6 vector<int> dp(s.size(), 0); 7 int res = 0, ans = 0; 8 for (int i = 1; i < s.size(); i++) 9 { 10 if (s[i] == ')') 11 if (s[i - 1] == '(') 12 dp[i] = 2 + dp[i - 2]; 13 else 14 { 15 if (s[i - dp[i - 1] - 1] == '(') 16 dp[i] = dp[i - 1] + dp[i - dp[i - 1] - 2] + 2; 17 } 18 ans = max(dp[i], ans); 19 } 20 return ans; 21 } 22 };