Given a string containing just the characters '('
and ')'
, find the length of the longest valid (well-formed) parentheses substring.
Example 1:
Input: "(()" Output: 2 Explanation: The longest valid parentheses substring is "()"
Example 2:
Input: ")()())" Output: 4 Explanation: The longest valid parentheses substring is "()()"
思路:使配对的括号转换成*,将计算最长有效括号的难题转换成计算最长连续*的问题。
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> stk;
for(int i=0; i< s.size(); i++){
if(s[i] == '(') stk.push(i);
else if(!stk.empty()){
s[stk.top()] = s[i] = '*'; //将配对的括号设置成*。
stk.pop();
}
}
int cunt =0;
int maxlen =0;
for(int i=0; i<s.size(); i++){
if(s[i] == '*') cunt++;
else{
maxlen = max(maxlen , cunt); //计算连续*的长度
cunt=0;
}
}
return max(maxlen, cunt); //比较最后一个连续*的长度与前面连续*长度
}
};