Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1875850
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2388
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-21 22:26
个人简介

90后空巢老码农

文章分类

全部博文(184)

文章存档

2021年(26)

2020年(56)

2019年(54)

2018年(47)

2017年(1)

我的朋友

分类: C/C++

2020-12-09 20:48:43

最开始看这道题的时候觉得直接按照有效字符串的思路去做就可以了,但是一直wa,后来发现这东西需要像最大矩形那道题目一样,需要记录一个起始点的下标的栈,然后根据pop的时候,设置相应规则进行迭代, 代码如下

点击(此处)折叠或打开

  1. int longestValidParentheses(string s){
  2.     stack<int> st;
  3.     int start=-1, len=s.length();
  4.     int res=0;
  5.     for(int i=0; i<len; i++){
  6.         if(s[i]=='(')st.push(i);// 左括号下标入栈,防止算多
  7.         else{
  8.             if(st.empty())start=i;// 弹出非法才会更新start
  9.             else{
  10.                 st.pop();
  11.                 if(st.empty())res=max(res,i-start);// 为空,则(start,i]满足全匹配
  12.                 else res=max(res,i-st.top());// 若不为空,则(st.top,i]满足全匹配
  13.             }
  14.         }
  15.     }
  16.     return res;
  17. }


阅读(1673) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~