Hot10032. 最长有效括号
Posted 王六六的IT日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hot10032. 最长有效括号相关的知识,希望对你有一定的参考价值。
参考:https://leetcode.cn/problems/longest-valid-parentheses/solution/zui-chang-you-xiao-gua-hao-by-leetcode-solution/
参考:leetcode hot 100-32. 最长有效括号
- 动态规划
class Solution
public int longestValidParentheses(String s)
int maxans = 0;
int[] dp = new int[s.length()];
for (int i = 1; i < s.length(); i++)
if (s.charAt(i) == ')')
if (s.charAt(i - 1) == '(')
dp[i] = (i >= 2 ? dp[i - 2] : 0) + 2;
else if (i - dp[i - 1] > 0 && s.charAt(i - dp[i - 1] - 1) == '(')
dp[i] = dp[i - 1] + ((i - dp[i - 1]) >= 2 ? dp[i - dp[i - 1] - 2] : 0) + 2;
maxans = Math.max(maxans, dp[i]);
return maxans;
- 栈
class Solution
public int longestValidParentheses(String s)
int maxans = 0;
Deque<Integer> stack = new LinkedList<Integer>();
stack.push(-1);
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) == '(')
stack.push(i);
else
stack.pop();
if (stack.isEmpty())
stack.push(i);
else
maxans = Math.max(maxans, i - stack.peek());
return maxans;
- 不需要额外的空间
class Solution
public int longestValidParentheses(String s)
int left = 0, right = 0, maxlength = 0;
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) == '(')
left++;
else
right++;
if (left == right)
maxlength = Math.max(maxlength, 2 * right);
else if (right > left)
left = right = 0;
left = right = 0;
for (int i = s.length() - 1; i >= 0; i--)
if (s.charAt(i) == '(')
left++;
else
right++;
if (left == right)
maxlength = Math.max(maxlength, 2 * left);
else if (left > right)
left = right = 0;
return maxlength;
以上是关于Hot10032. 最长有效括号的主要内容,如果未能解决你的问题,请参考以下文章