演算法題 最長有效括號

2021-10-07 18:23:21 字數 1274 閱讀 7729

題目描述:

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

示例 1:

輸入: "(()"

輸出: 2

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

示例 2:

輸入: ")()())"

輸出: 4

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

解法一

使用棧來儲存元素下標,從下標來計算長度。

時間複雜度:o(n),n為字串長度,遍歷每個字串元素。

空間複雜度:o(n),棧的大小最壞會達到o(n)。

class

solution

//如果是右括號

else

//如果棧沒空,說明是有效子串,計算其最長長度

else}}

return maxans;

}}

解法二:

動態規劃

時間複雜度:o(n)

空間複雜度:o(n)

public

class

solution

//如果是右括號並且leftcount>0

else

if(leftcount >0)

}return result;

}}

解法三

使用兩個指標,分別記錄左右括號的個數。

兩次迴圈遍歷,分別處理右括號多於左括號的情況,和左括號多於右括號的情況,和數量相等為有效子串的情況。

時間複雜度:o(n),空間複雜度:o(1)

class

solution

//是有括號,右括號計數加1

else

//如果左右括號數相等,則是有效括號,計算長度

if(left == right)

//如果右括號比左括號多,要重新開始計數

else

if(right>left)

}//反向再遍歷一次,處理左括號比右括號多的情況

left = right =0;

for(

int i=s.

length()

-1;i>=

0;i--

)else

if(left == right)

else

if(left > right)

}return res;

}}

最長有效括號

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

最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2解釋 最長有效括號子串為 示例 2 輸入 輸出 4解釋 最長有效括號子串為 思路 解法1 借助棧 借助棧來求解,需要定義個start變數來記錄合法括號串的起始位置,我們遍歷字串,如果遇到左括號,則將當前下標壓入棧...

最長有效括號

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