32 最長有效括號

2021-10-25 09:42:13 字數 915 閱讀 4613

給定乙個只包含 『(』 和 『)』 的字串,找出最長的包含有效括號的子串的長度。

示例 1:

輸入: 「(()」

輸出: 2

解釋: 最長有效括號子串為 「()」

示例 2:

輸入: 「)()())」

輸出: 4

解釋: 最長有效括號子串為 「()()」

這是一道動態規劃題目,但是確實不好想。如果用暴力做法,需要o(n^3)的時間複雜度。

陣列f表示狀態陣列,f[i]表示必須以第i個字元結尾的字串,其中最長的有效括號長度(必須包含第i個字元)。如果第i個字元為』(』,那麼以第i個字元結尾的字串,最長的有效括號長度就是0,這是最簡單的情況。

如果第i個字元為』)』,那麼需要看i前面的字元。就是需要統計f[i-1]的長度,f[i-1]表示i-1個字串結尾的最長有效括號的長度,設為l,那麼如果第i-l-1個字元恰好為『(』,說明此時從i-l-1位置到i位置正好是乙個有效括號,但是此時還沒結束,還需要統計f[i-l-1-1]的值,也就是第i-l-1個字元的前面那個字元j,以第j個字元結尾的最長有效括號的長度。

如果那麼如果第i-l-1個字元恰好為『)』,則第i-l-1個字元與第i個字元無法匹配。那麼f[i]就是0。

時間複雜度為o(n)。非常巧妙

public

intlongestvalidparentheses

(string s)

int max_l =0;

int f=

newint

[n];

f[0]

=0;for

(int i=

1;i)else}}

max_l = math.

max(max_l,f[i]);

}return max_l;

}

32 最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 class solution return res dp i 表示以當前位置為終點的最長長度,則只能在 處更新,如果s i 1 dp...

32 最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。輸入 輸出 2 解釋 最長有效括號子串為 輸入 輸出 4 解釋 最長有效括號子串為 示例沒有說明,其實 也是有效的,答案為4 class solution def longestvalidparentheses self,s str i...

32 最長有效括號

題目.high 字串首先想到dp,以第n個數為結尾的最大括號數,要麼是前面n 1的最大括號數,要麼是一第n個數結尾的括號數 package main import fmt func endlongerst s string int else if rights 0 return pairs func...