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

書院二層樓發表於2020-12-01
'''
如果字串滿足一下條件之一,則可以稱之為 有效括號字串(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)

 

相關文章