給定乙個字串s,判斷是不是整體有效的括號字串。
例如:
遍歷字串,記錄待匹配的』(『的個數count,遇到』(』, count += 1,遇到』)』, count -= 1,如果過程中count < 0,返回false。遍歷完成,且count恰好為0,返回true
def
is_valid
(s):
if s is
none
orlen
(s)<2or
len(s)%2
!=0:return
false
count =
0for c in s:
if c notin(
'(',
')')
:return
false
if c ==
')':
count -=
1if count <0:
return
false
else
: count +=
1return count ==
0
給定乙個括號字串,返回最長的有效括號子串長度。
例如:
動態規劃:
如果s[i] == 『)』, 令prev = i - dp[i-1] - 1,如果s[prev] == 『(』,
dp[i] = dp[i-1] + 2
如果prev >= 1:
dp[i] += dp[prev-1]
def
max_valid_length
(s):
if s is
none
orlen
(s)==0:
return
0 dp =[0
]*len(s)
for i in
range(1
,len
(s))
:if s[i]
==')'
: prev = i - dp[i-1]
-1if prev >=
0and s[prev]
=='('
: dp[i]
= dp[i-1]
+2+(dp[prev-1]
if prev >=
1else0)
return
max(dp)
def
test_is_valid()
:assert
(is_valid('')
isfalse
)assert
(is_valid(
'(')
isfalse
)assert
(is_valid(
')')
isfalse
)assert
(is_valid(
'()')is
true
)assert
(is_valid(
'()()')is
true
)assert
(is_valid(
'(())')is
true
)assert
(is_valid(
'(()())')is
true
)assert
(is_valid(
')((())')is
false
)assert
(is_valid(
'())(')is
false
)print
('pass'
)def
test_max_valid_length()
:assert
(max_valid_length(
'(())')==
4)assert
(max_valid_length(
'())')==
2)assert
(max_valid_length(
'(()')==
2)assert
(max_valid_length(
'(()())')==
6)assert
(max_valid_length(
'()(()()(')==
4)print
('pass'
)if __name__ ==
'__main__'
: test_is_valid(
) test_max_valid_length(
)
牛客網-括號字串的有效性
牛客網-括號字串的最長有效長度
括號字串的有效性和最長有效長度
獲取最長的有效括號子串 題目 給定乙個字串s,判斷是不是整體有效的括號字串。舉例 s 返回true s 返回true s 返回true。s 返回false s 返回false s a 返回false。演算法思路 整體有效的括號字串是指匹配的圓括號弧 無其他括號 遍歷整個字串s 若遇到除 和 之外的字...
字串問題之 括號字串的有效性和最長有效長度
給定乙個字串 str,判斷是不是整體有效的括號字串 str true str a false 高階題目 給定乙個括號字串str,返回最長的有效括號子串 首先原問題的解決思路 各種判斷 遍歷判斷每個字元是不是 或 如果不是,false 遍歷到每乙個字元時,都檢查到目前為止 和 的數量,如果 多 返回f...
字串 最長有效括號
給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 思路 記錄左右括號的個數 相等了就比較更新答案 如果count2 count1 就結算 從0開始 注意 還要從右向左遍歷!不然會漏掉...