题目:
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
输入例子1:
“(()”
输出例子1:
2
输入例子2:
“(()()”
输出例子2:
4
说明:
利用栈进行求解,start变量保存一个起始下标,每次当栈为空时置为‘)’下一个字符的下标。每遇到一个左括号,将该字符下标入栈。遇到右括号时,若栈为空,更新start。若栈不为空,出栈,并更新maxLen的值。
代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串
* @return int整型
*/
int longestValidParentheses(string s) {
// write code here
stack<int> st;
int n=s.length();
int maxLen=0,start=0;
for(int i=0;i<n;i++){
if(s[i]=='('){
st.push(i);
}else if(s[i]==')'){
if(st.empty()){
start=i+1;
}else{
st.pop();
maxLen=st.empty()?max(maxLen,i-start+1):max(maxLen,i-st.top());
}
}
}
return maxLen;
}
};