问题描述:
Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
For “(()”, the longest valid parentheses substring is “()”, which has length = 2.
Another example is “)()())”, where the longest valid parentheses substring is “()()”, which has length = 4.
也就是给定一个包含‘(’和‘)’的字符串,找出最长的有效括号匹配子串的长度。
问题求解:
class Solution {
public:
int longestValidParentheses(string s) {
int n=s.size();
stack<int> sc;
//int count=0;
int curstart=0;
int maxlen=0;
for(int i=0;i<n;i++)
{
if(s[i]=='(')
{
sc.push(i);//只把左括号的索引入栈!!!!
}
else
{//s[i]为右括号")"
if(sc.size()==0)
{//该右括号永远不会被匹配,当前计算起点移到下一个
curstart=i+1;
}
else
{
sc.pop();
if(sc.empty())
{//如果栈已空,说明当前所有左括号都已匹配完毕,maxlen即为
//起点到i的长度与之前maxlen的最大值
maxlen=max(maxlen, i-curstart+1);
}
else//例如“) (()()) ( ()()”
{//如果栈非空,说明当前还有左括号未匹配,maxlen即为i-(sc.top+1)+1=i-sc.top
//与之前maxlen的最大值
maxlen=max(maxlen, i-sc.top());
}
}
}
}
return maxlen;
}
};