最長有效括號

2021-08-31 18:39:05 字數 1082 閱讀 2277

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

示例 1:  輸入:"(()"輸出:2解釋:最長有效括號子串為"()"

示例 2:  輸入:")()())"輸出:4解釋:最長有效括號子串為"()()"

思路:

解法1:借助棧

借助棧來求解,需要定義個start變數來記錄合法括號串的起始位置,我們遍歷字串,如果遇到左括號,則將當前下標壓入棧,如果遇到右括號,如果當前棧為空,則將下乙個座標位置記錄到start,如果棧不為空,則將棧頂元素取出,此時若棧為空,則更新結果和i - start + 1中的較大值,否則更新結果和i - 棧頂元素中的較大值。

public int longestvalidparentheses(string s) else if(s.charat(i) == ')')else}}

return res;

}

解法2:動態規劃

需用到輔助陣列d[s.length()],表示從當前字元開始,到字串結尾的最長有效括號子串長度(當前字元需為有效括號子串的第乙個字元)

解題思路:從字串結尾往前處理,求輔助陣列d

當前字元下標為index,若當前字元為左括號'(',判斷index+1+d[index+1]位置的字元是否為右括號')',若為右括號,則d[index] = d[index+1]+2,並且判斷index+1+d[index+1]+1位置的元素是否存在,若存在,則d[index] += d[index+1+d[index+1]+1](解決上述兩個有效括號子串直接相鄰的情況)

class solution 

} max = math.max(max, d[index]);

}return max;}}

參考:

最長有效括號

leedcode32 給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2解釋 最長有效括號子串為 示例 2 輸入 輸出 4解釋 最長有效括號子串為 思路 首先生成乙個長度和s一樣的陣列dp,dp i 表示以i結尾的字元的最長有效括號子串長度。顯然dp 0 0 假...

最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。輸入 輸出 2 解釋 最長有效括號子串為 輸入 輸出 4 解釋 最長有效括號子串為 用陣列dp i 表示括號串s i 結尾的最大括號字串長度。當 s i 是 時,dp i 一定為0。當s i 為 時,判斷s i 1 是否為 s i 1 ...

最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 class solution def longestvalidparentheses self,s str int def test...