日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode32 Longest Valid Parentheses

發布時間:2025/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode32 Longest Valid Parentheses 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

* 找出字符串中最長的有效子串,字符串只包括'(' , ')'。何為有效,可參考leetcode20 判斷一個字符串是否為有效字符串。

解題思路

介紹動態規劃的解法

  • 從倒數第二個元素往前遍歷,特別針對 " ( ) " 的情況。
  • 用一維數組保存結果,d[i] 代表從當前下標 i 到字符串 s 最末尾的子串中的最長有效子串的長度。
  • 動態方程如何寫呢?
  • 對于當前下標i,如果是 ' ( ',則考慮右邊子串中的元素,是否為 ' )'。考慮哪一個呢? symi 變量是怎么想到的呢?后來我思考發現,發現原作設置的 symi 變量確實巧妙。symi 代表對于當前下標i,需要進行匹配的右括號的位置。此時若是匹配,則得到的 d[i] 代表從 i 到 symi 之間的子串的最長有效子串長度,如果下標 symi 右邊還有元素。則需要加上 d[symi+1]。
  • 1 public class Solution { 2 public int longestValidParentheses(String s) { 3 if(null == s) return 0; 4 int len = s.length(), max = 0; 5 int[] d = new int[len]; 6 for (int i = len-2; i >= 0; i--){ 7 int symi = i+1+d[i+1]; 8 if ('(' == s.charAt(i) && symi < len && ')' == s.charAt(symi)){ 9 // 如果滿足條件,則相當于在d[i+1]的基礎上又多了一對"()",所以長度+2 10 d[i] = d[i+1]+2; 11 // 如果symi右邊還有元素,那么d[i]就應該加上d[symi+1] 12 if(symi+1 < len){ 13 d[i] += d[symi+1]; 14 } 15 } 16 max = Math.max(max, d[i]); 17 } 18 return max; 19 } 20 }

    ?

  • 轉載于:https://www.cnblogs.com/dogeLife/p/11000444.html

    總結

    以上是生活随笔為你收集整理的leetcode32 Longest Valid Parentheses的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。