From 2fe32a5218e7a566788cefe9d6ba805bedaa0dba Mon Sep 17 00:00:00 2001 From: linlihong <747682928@qq.com> Date: Thu, 26 Sep 2024 16:18:49 +0800 Subject: [PATCH] =?UTF-8?q?2024/9/26=20Hot100=20dp=E7=BB=93=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/cool/hot100/dp/Num31.java | 43 +++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/main/java/com/cool/hot100/dp/Num31.java b/src/main/java/com/cool/hot100/dp/Num31.java index 4c7a34e..4c28e32 100644 --- a/src/main/java/com/cool/hot100/dp/Num31.java +++ b/src/main/java/com/cool/hot100/dp/Num31.java @@ -41,6 +41,7 @@ public class Num31 { /** * 动态规划解法 + * * @param s * @return */ @@ -67,4 +68,46 @@ public class Num31 { } return max; } + + /** + * 双指针 + * + * @param s + * @return + */ + public int longestValidParentheses3(String s) { + int left = 0, right = 0, max = 0; + //从前往后右括号大于左括号,left和right都归0 + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '(') { + left++; + } else { + right++; + } + //left大于right先不管 + if (left == right) { + max = Math.max(max, 2 * right); + } else if (right > left) { + //right大于left重新记 + left = right = 0; + } + } + 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) { + max = Math.max(max, 2 * left); + } else if (left > right) { + //left大于right重新记,这个很重要 + left = right = 0; + } + } + return max; + } + }