Python有效括號字串判斷和深度計算

2021-10-11 02:29:24 字數 1245 閱讀 2998

'''

如果字串滿足一下條件之一,則可以稱之為 有效括號字串(valid parentheses string,可以簡寫為 vps):

字串是乙個空字串 "",或者是乙個不為 "(" 或 ")" 的單字元。

字串可以寫為 ab(a 與 b 字串連線),其中 a 和 b 都是 有效括號字串 。

字串可以寫為 (a),其中 a 是乙個 有效括號字串 。

類似地,可以定義任何有效括號字串 s 的 巢狀深度 depth(s):

depth("") = 0

depth(c) = 0,其中 c 是單個字元的字串,且該字元不是 "(" 或者 ")"

depth(a + b) = max(depth(a), depth(b)),其中 a 和 b 都是 有效括號字串

depth("(" + a + ")") = 1 + depth(a),其中 a 是乙個 有效括號字串

例如:""、"()()"、"()(()())" 都是 有效括號字串(巢狀深度分別為 0、1、2),而 ")(" 、"(()" 都不是 有效括號字串 。

給你乙個 有效括號字串 s,返回該字串的 s 巢狀深度 。

示例 1:

輸入:s = "(1+(2*3)+((8)/4))+1"

輸出:3

解釋:數字 8 在巢狀的 3 層括號中。

示例 2:

輸入:s = "(1)+((2))+(((3)))"

輸出:3

示例 3:

輸入:s = "1+(2*3)/(2-1)"

輸出:1

示例 4:

輸入:s = "1"

輸出:0

'''import re

def maxdepth(s):

#將非(、)字元替換為空

clean_s = re.sub("[^(,)]","",s)

depth = 0

#迴圈替換(),沒迴圈一次,深度加1

while "()" in clean_s:

clean_s = clean_s.replace("()","")

depth += 1

#如果clean_s不為空,則為非有效括號字串,返回-1,否則為有效括號字串,返回depth

return depth if clean_s=="" else -1

s = "(1+(2*3)+((8)/4))+1"

maxdepth(s)

有效的括號字串

問題描述 給定乙個只包含三種字元的字串 和 寫乙個函式來檢驗這個字串是否為有效字串。有效字串具有如下規則 任何左括號 必須有相應的右括號 任何右括號 必須有相應的左括號 左括號 必須在對應的右括號之前 可以被視為單個右括號 或單個左括號 或乙個空字串。乙個空字串也被視為有效字串。例 1 輸入 輸出 ...

字串 最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 思路 記錄左右括號的個數 相等了就比較更新答案 如果count2 count1 就結算 從0開始 注意 還要從右向左遍歷!不然會漏掉...

python 判斷字串日期是否有效

用time模組的strptime函式獲取時間元組,如果成功為合法時間,反之為非法時間 def isvailddate self,date try if indate time.strptime date,y m d h m s else time.strptime date,y m d return...