有乙個只包含()的字串,找出其中最長的有效的括號子串。
利用棧,我們遇到(的時候將它的下標放入棧中,遇到)時先將棧頂元素彈出(也就是它的左括號),如果此時棧中沒有元素,則說明此時之前的所有括號都被分配完,這就是最後乙個匹配的有效右括號,將它的座標放入棧中。如果此時棧不為空,將res更新為以此時右括號結尾的字串的長度,為原來res和i-stack.peek()的較大值。
class solution else
else}}
return res;
}}
有最字,是否存在,計數等字眼時,說明時求乙個最終值,可以用動態規劃來分析。
用f(i)表示以下標為i結束的陣列中最長有效括號長度。
因為以)結束的字串才是有效的字串,以(結束時dp[i]為0,所以s[i]為)且s[i-1]為(時f(i)=f(i-2)+2
如果s[i]為),s[i-1]也為),則因為f(i-1)可以得到i-1時的有效長度,則如果s[i-1-f[i-1]]是(,則說明這一段的有效長度可以在i+1的基礎上加2,還要注意的是因為現在消化掉了之前的(,也就是(之前的陣列有可能組成新的對子,所以還要加上這一段之前的有效子串。
f[i]=f[i-1]+2+f[i-f[i-1]-2]
最後的答案即為最大值。
class solution else}}
res=math.max(res,dp[i]);
}return res;
}}
字串 最長有效括號
給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 思路 記錄左右括號的個數 相等了就比較更新答案 如果count2 count1 就結算 從0開始 注意 還要從右向左遍歷!不然會漏掉...
最長有效括號 字串匹配題型
輸入 輸出 2 解釋 最長有效括號子串為 輸入 輸出 4 解釋 最長有效括號子串為 最直觀的棧解法,通過下標減下標值 class solution else if i dp i 1 0 s.charat i dp i 1 1 maxans math.max maxans,dp i return ma...
括號字串的最長有效長度
括號字串的最長有效長度 給定乙個括號字串str,返回最長的能夠完全正確匹配括號字元字串的長度。輸入描述 輸出一行字串,代表str 1 l engt hstr 105 str 1 leq length leq 10 5 str 1 leng thst r 1 05 輸出描述 輸出乙個整數,代表括號字串...