题解 | #最长的括号子串#
最长的括号子串
http://www.nowcoder.com/practice/45fd68024a4c4e97a8d6c45fc61dc6ad
题意:
给出一个长度为 n 的,仅包含字符 '(' 和 ')' 的字符串,计算最长的格式正确的括号子串的长度。
方法:
栈
思路:首先,初始化一个存储左括号下标的栈;然后,遍历字符串:如果是左括号,则左括号下标入栈;如果是右括号,则判断:1.栈空,则更新last值;2.栈非空,则计算并维护最大值。
class Solution {
public:
int longestValidParentheses(string s) {
int len=s.size();
stack<int> st;//栈存储左括号的下标
int res=0,last=-1;
for(int i=0;i<len;i++){//遍历字符串
if(s[i]=='('){//左括号下标入栈
st.push(i);
}else{//如果是右括号,则判断:1.栈空,则更新last值;2.栈非空,则计算并维护最大值
if(st.empty()){
last=i;
}else{
st.pop();
res=max(res,st.empty()?i-last:i-st.top());//维护最大值
}
}
}
return res;
}
};
时间复杂度:
空间复杂度:![]()
