題目描述:
給定乙個只包含 『(』 和 『)』 的字串,找出最長的包含有效括號的子串的長度。
示例 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 ...