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.

给定一串只包含左右括号的字符串,判断里面合法的个数。左右括号镶嵌嵌套也是合法的例如(())(),合法的和合法的相连也是合法的。这个用DP是可以的。在http://www.cnblogs.com/huntfor/p/3886111.html中介绍了DP可以通过。在http://www.cnblogs.com/lichen782/p/leetcode_Longest_Valid_Parentheses.html的DP却说通不过。改天要好好复习一下动态规划。

我学习了如下的解法。就是按照从前往后遍历,遇到左括号就放入栈中,栈是用来存左括号的下标的,方便之后计算长度。遇到右括号的话考虑两种情况,如果此时栈为空,那这个右括号就是违法的,用last记录它的位置,这样last就记录了我们遍历到i为止的最后一个违法的数,这样的话,再往下遍历,如果发现栈为空了的时候就可以用i-last来表示刚才在i和last中间合法的个数。如果往下遍历发现栈不为空,那么就用当前的i-栈顶元素,因为栈顶元素记录的是离i最近的一个左括号,所以i减去它就记录了他们之间合法的个数,如果大于max就更新。就这样一直遍历到i结束为止。最后输出max就是结果了

class Solution {
public:
int longestValidParentheses(string s)
{
if (s.size() < )
return ;
stack<int> sta;
int last = -, max = ; for (int i = ; i < s.size(); i++)
{
if (s[i] == '(') // 如果是左括号,就将其对应的下标存到栈中
sta.push(i);
if (s[i] == ')') // 如果是右括号
{
if (sta.empty()) // 如果栈为空,last记录为i,也就是遍历到此i的最后一个不符合的右括号的位置
{
last = i;
}
else // 如果不空,那就pop一个左括号的下标
sta.pop();
}
if (sta.empty()) //如果以上操作,sta为空,那么就记录最后一个右括号到i的个数-1为合法的个数
max = std::max(max, i - last);
else // 如果sta还有左括号,那就用剩下的没有匹配的括号到i的个数-1为合法的个数和max比较
max = std::max(max, i - sta.top());
}
return max;
}
};

leetcode第31题--Longest Valid Parentheses的更多相关文章

  1. leetcode解题报告 32. Longest Valid Parentheses 用stack的解法

    第一道被我AC的hard题!菜鸡难免激动一下,不要鄙视.. Given a string containing just the characters '(' and ')', find the le ...

  2. LeetCode 笔记系列八 Longest Valid Parentheses [lich你又想多了]

    题目:Given a string containing just the characters '(' and ')', find the length of the longest valid ( ...

  3. LeetCode (32) Longest Valid Parentheses

    题目 Given a string containing just the characters '(' and ')', find the length of the longest valid ( ...

  4. 【LeetCode每天一题】Valid Parentheses(有效的括弧)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  5. leetcode解题报告 32. Longest Valid Parentheses 动态规划DP解

    dp[i]表示以s[i]结尾的完全匹配的最大字符串的长度. dp[] = ; ; 开始递推 s[i] = ')' 的情况 先想到了两种情况: 1.s[i-1] = '(' 相邻匹配 这种情况下,dp ...

  6. LeetCode 32. 最长有效括号(Longest Valid Parentheses) 31

    32. 最长有效括号 32. Longest Valid Parentheses 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 每日一算法2019/6/ ...

  7. 【LeetCode每天一题】Longest Valid Parentheses(最长有效括弧)

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  8. 【leetcode刷题笔记】Longest Valid Parentheses

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  9. [LeetCode] Longest Valid Parentheses 最长有效括号

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

随机推荐

  1. .NET单元测试艺术(3) - 使用桩对象接触依赖

    List 3.1 抽取一个设计文件系统的类,并调用它 [Test] public bool IsValidLogFileName(string fileName) { FileExtensionMan ...

  2. Oracle压缩总结2— 估计表压缩效应

    使用压缩前,我们可以估算压缩能有多大效果. 11gr2我已经能够使用dbms_comp_advisor,具体代码见附件.只需要运行两个文件dbmscomp.sql和prvtcomp.plb.然后使用D ...

  3. NSIS文字及字符串函数与头文件介绍

    原文 NSIS文字及字符串函数与头文件介绍 文字函数,顾名思义就是处理字符串的函数.使用这些字符串函数前,必须先包含头文件WordFunc.nsh.该头文件目前包含如下一些函数:WordFind.Wo ...

  4. 关于java socket(转)

    1. 关于new Socket()中参数的理解 Server端: 调用ServerSocket serverSocket = new ServerSocket(1287,2);后Server端打开了指 ...

  5. 公布一个基于 Reactor 模式的 C++ 网络库

    公布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...

  6. 机器人操作系统 除了Android还有一个ROS(转)

    你知道市面上的机器人都采用了哪些操作系统吗? 估计大多数人给出的答案就是 Android 了.从市面上的产品来看,基于 Android 系统开发的机器人确实是主流,但是还有一种操作系统却鲜为人知,它叫 ...

  7. Bind和Eval的区别详解

    原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...

  8. krpano漫游加方向性3D声音(这篇文章已被移到krpano中国网站 krpano360.com)

    需求:      在场景转换视角时.会出现不同方位的声音以及对应的音量变化,也即是将声音视作hotspot.当视角转到该声音热点时,也随之听到声音.官方样例:点击打开链接 本文已经搬迁到下述网址.请点 ...

  9. 我的MYSQL学习心得(六)

    原文:我的MYSQL学习心得(六) 我的MYSQL学习心得(六) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...

  10. 我展示了视频采集前端vfe和camera,decode等交互驱动的体系结构

    到现在都与处理器接触较多.更深入的驱动主要是前端视频采集.控制TI的DM64xx,DM3730.纪氏A31等待.他们发现,它们的使用的基本框架的是不一样的. 当然,典型camera例如ov系列,dec ...