給定乙個括號字串,返回最長的有效括號子串
分析:1)同樣以動態規劃思維解決:
首先,dp應該代表什麼?
以i位置的字元結尾的最長有效括號子串.
?此類dp值代表強制性以i結尾計算值的特徵為(如:最長公共子串):題目要求中符合條件的值一定都是連續的?
2)通過dp值來解決動態規劃通式,dp值代表以i位置字元結尾的最長有效括號子串
① 根據dp值可知 若i位置的字元不為 右括號 ) 而是左括號 ( 那一定是無效的。此時我們只需要分析 右括號結尾的情況
②以 ) 結尾 來分析,那麼dp[i]的值就涉及到 前乙個dp值,左括號是需要右括號匹配的,但是要做到最長括號字串,那麼通常情況下前乙個也就是i-1的值我不取直接就是左括號,那就繼續取右括號,那麼要找到能與i對應的左括號,我就需要把i-1位置的右括號先解決掉,那這個時候i-1又取決於dp[i-1]當解決掉i-1,與i相對應的需要匹配的值位置就為i- dp[i-1] - 1,
③通過2解決掉i位置的括號後,還需要特別注意的是,當與i匹配成功,也就是 i-dp[i-1] -1 位置正好是左括號,此時 這個左括號再前面乙個的值正好又是有效括號對,那我也應該將這些個括號對加進去
**實現:
public
intmaxlengthkuohao
(string str)
int dp=
newint
[str.
length()
];char
chas = str.
tochararray()
;int maxlength =0;
int pre =0;
for(
int i =
0; i < str.
length()
; i++)}
}return maxlength;
}
總結:
經典的動態規劃,這道題目做完算是分析出,dp陣列代表的含義如何取值的其中一種情況。即當題意中符合要求的情況一定是連續的情況下,那我們dp陣列取值的限制一般都會有 強制性以i位置結尾去規劃通式。
字串 最長有效括號
給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 思路 記錄左右括號的個數 相等了就比較更新答案 如果count2 count1 就結算 從0開始 注意 還要從右向左遍歷!不然會漏掉...
括號字串的最長有效長度
括號字串的最長有效長度 給定乙個括號字串str,返回最長的能夠完全正確匹配括號字元字串的長度。輸入描述 輸出一行字串,代表str 1 l engt hstr 105 str 1 leq length leq 10 5 str 1 leng thst r 1 05 輸出描述 輸出乙個整數,代表括號字串...
有效的括號字串
問題描述 給定乙個只包含三種字元的字串 和 寫乙個函式來檢驗這個字串是否為有效字串。有效字串具有如下規則 任何左括號 必須有相應的右括號 任何右括號 必須有相應的左括號 左括號 必須在對應的右括號之前 可以被視為單個右括號 或單個左括號 或乙個空字串。乙個空字串也被視為有效字串。例 1 輸入 輸出 ...