题目:
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:
//32. Longest Valid Parentheses
// 建立stack,存放左括号下标,遇到右括号则依次出栈
int longestValidParentheses(string s) {
vector<int> vec(s.size(),0);
stack<int> Stack; //存下标
for(int i = 0; i < s.size(); i++){
if( s[i] == '(' ){ //左括号下标进栈
Stack.push(i);
}
else{
if(Stack.empty()) continue; // 栈为空,则说明前面无对应左括号,跳过即可
else{
if(Stack.top()>0 && s[Stack.top()-1]==')'){
vec[i] = i - Stack.top() + 1 + vec[Stack.top()-1]; //类似"()()"的情况,左括号前面是右括号,需要加上已匹配的括号对
}
else{
vec[i] = i - Stack.top() + 1; //否则直接计算下标差值 "()" "((()))"
}
Stack.pop(); //出栈
}
}
}
int maxPair = 0;
for(int i = 0; i < s.size(); i++){
if(vec[i] > maxPair) maxPair = vec[i];
}
return maxPair;
}
};