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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

括号字符串的有效性和最长有效长度

發布時間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 括号字符串的有效性和最长有效长度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

  給定一個字符串str,判斷是不是整體有效的括號字符串。例如,str = “()()()”,返回True,str = “())” 或 “()a()”,返回False。

補充題目

  給定一個括號字符串,返回最長的有效字符串的長度。

?

基本思路

原問題。判斷過程如下:

從左到右遍歷str,判斷每一個字符是否是括號,如果不是,直接返回False。
遍歷過程中,檢查目前位置 ‘(‘和 ‘)’的數量,如果 ‘)’的數量多,直接返回False。
遍歷結束后,檢查 ‘(‘和 ‘)’的數量是否相同,如果一樣多返回True,否則返回False。


補充問題。使用動態規劃,類似于最長遞增子序列問題。假設str的長度為N,生成長度為N的dp數組,dp[i]的含義是必須以str[i]結尾的最長有效括號長度子串。dp的求解如下:

dp[0],表示只含有一個括號,dp[0] = 0。

如果dp[i] == ‘(‘,肯定不能作為末尾,dp[i] = 0。

如果dp[i] == ‘)’,dp[i-1]的含義是以str[i-1]結尾的最長有效子串長度,如果 i - dp[i-1] - 1位置上的字符是 ‘(‘,則可以與dp[i]湊成一對,則此時dp[i]最小等于dp[i-1] + 2。此外,如果 i - dp[i-1] - 1位置上的字符變成了有效字符,那么以該位置的前一個位置 i - dp[i-1] - 2的最長有效長度也應該加進來,所以dp[i] = dp[i-1] + 2 + dp[i - dp[i-1] - 2]。
dp[0…N-1]中最大的值就是最長的有效字符串的長度。
?

"""原問題"""def isValid(str1):if str1 == None or str1 == '':return 0status = 0for i in range(len(str1)):if str1[i] != '(' and str1[i]!= ')':return Falseif str1[i] == '(':status +=1if str1[i] == ')' and status - 1 < 0:status -= 1return Falsereturn status == 0"""補充問題"""def maxLength(str1):if str1 == None or str1 == '':return 0dp = [0 for i in range(len(str1))]res = 0for i in range(str1):if str1[i] == ')':pre = i - dp[i-1] - 1if pre >= 0 and str1[pre] == '(':dp[i] = dp[i-1] + 2 + dp[pre] if pre > 0 else 0res = max(res,dp[i])return res

?

總結

以上是生活随笔為你收集整理的括号字符串的有效性和最长有效长度的全部內容,希望文章能夠幫你解決所遇到的問題。

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