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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

題目

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

補(bǔ)充題目

  給定一個(gè)括號(hào)字符串,返回最長(zhǎng)的有效字符串的長(zhǎng)度。

?

基本思路

原問題。判斷過程如下:

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


補(bǔ)充問題。使用動(dòng)態(tài)規(guī)劃,類似于最長(zhǎng)遞增子序列問題。假設(shè)str的長(zhǎng)度為N,生成長(zhǎng)度為N的dp數(shù)組,dp[i]的含義是必須以str[i]結(jié)尾的最長(zhǎng)有效括號(hào)長(zhǎng)度子串。dp的求解如下:

dp[0],表示只含有一個(gè)括號(hào),dp[0] = 0。

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

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

"""原問題"""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"""補(bǔ)充問題"""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

?

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。