題目描述:
給定乙個只包含 『(』 和 『)』 的字串,找出最長的包含有效括號的子串的長度。
方法一:
從頭遍歷字串,以i為字串的第乙個字元開始,直到找到最長的有效字串,記錄長度最長的返回即可
class
solution
else
if(flag<0)
else
if(flag==0)
} l=math.
max(l,ll);}
return l;
}}
方法二:
我們對每個偶數長度的子字串都進行判斷,並儲存目前為止找到的最長的有效子字串的長度。
class
solution}}
return max;
}public
boolean
func
(string str)
elseif(
!s.isempty()
)else
}return s.
isempty()
;}}
方法三:
class
solution
else
else}}
return max;
}}
方法四:
利用兩個計數器 leftl和 right 。首先,我們從左到右遍歷字串,對於遇到的每個『(』,我們增加 left 計算器,對於遇到的每個 『)』 ,我們增加 right 計數器。每當 left 計數器與right 計數器相等時,我們計算當前有效字串的長度,並且記錄目前為止找到的最長子字串。如果 right 計數器比 left 計數器大時,我們將 left和 right 計數器同時變回 0 。
從左到右一次,從右到左一次,向「(()」這種從左到右是遍歷不出來的,所以需要從左到右遍歷,「())」同理
class
solution
else
if(left==right)
else
if(right>left)
} left=0;
right=0;
for(
int i=len-
1;i>=
0;i--
)else
if(left==right)
else
if(right}return max;
}}
最長有效括號
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 ...