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"()()"
解题思路:
这道题可以用栈来解决 ;如果是'('就将下标入栈 , 如果是')'就判断栈是否空,如果是空,则说明有效字符串已经结束了,start位置为i + 1 , 如果非空,则弹出栈顶元素。再判断栈是否空,如果为空,则说明刚好匹配,更新有效字符串长度,如果非空,则用当前位置减去栈顶元素的位置可以得到目前有效的字符串长度(我觉得这里最妙了!相比我之前记录的有效字符串长度真的弱爆了) 。
class Solution {
public:
int longestValidParentheses(string s)
{
stack<int> le_par ;
int ans = 0 ;
int start = 0 ;
for(int i = 0 ; i < s.size() ; ++i)
{
if(s[i] == '(')
{
le_par.push(i) ;
}
else
{
if(le_par.empty())
{
start = i + 1 ;
}
else
{
le_par.pop() ;
le_par.empty() ? ans = max(ans , i - start + 1) : ans = max(ans , i - le_par.top()) ;
}
}
}
return ans ;
}
};