题意:
给出一个长度为 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; } };
时间复杂度:空间复杂度: