博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
32. Longest Valid Parentheses
阅读量:6256 次
发布时间:2019-06-22

本文共 1384 字,大约阅读时间需要 4 分钟。

32. Longest Valid Parentheses

题目

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.

解析

  • 对于括号匹配,和Valid Parentheses同样的思路,用栈维护左括号,即在读取字符串的时候,遇到左括号就入栈。遇到右括号就出栈,同时判断当前括号匹配的子串是否为最长子串。不过在判断括号匹配的子串的长度的时候,有一些值得注意的问题,其中需要借助变量l记录当前括号匹配的子串的左侧位置.
  • 本题使用初始-1入栈,就省去了记录记录当前括号匹配的子串的左侧位置;(()):3-(-1)=4; 但是栈为空的时候,需要入栈当前位置,例如 ())()()=6-2=4,在str[2]=')'入栈index
class Solution_32 {public:        // 只是入栈‘(’并不能解决问题,需要入栈‘(’的下标index    int longestValidParentheses(string s) {        if (s.size()<=1)        {            return 0;        }        stack
sta; sta.push(-1); //技巧使用了初始化,否则需要记录 需要借助变量l记录当前括号匹配的子串的左侧位置 int ret = 0; for (int i = 0; i < s.size();i++) { if (s[i]=='(') { sta.push(i); } else { sta.pop(); if (sta.empty()) { sta.push(i); //入栈 } else { int cur = i - sta.top(); ret = max(ret,cur); } } } return ret; }};

题目来源

转载地址:http://cknsa.baihongyu.com/

你可能感兴趣的文章
快速部署远程同步服务Rsync
查看>>
玩 High API 系列之:UGC内容检测
查看>>
Lync Server 2010边缘需要的公网IP数量
查看>>
开发常见错误解决(2)WSE3.0安装问题,VS2005集成
查看>>
使用扩展方法对调用进行验证
查看>>
这样学习Unix下C语言编程最有效
查看>>
Office 365强势来袭PART2:云中SharePoint
查看>>
一个字符串找查的例子
查看>>
云计算概况及第一个Azure程序
查看>>
C# 使用NPlot绘图技巧
查看>>
寻找生命的方向终究要靠自己
查看>>
Fresnel Reflection - 菲涅尔反射
查看>>
IBM WebSphere
查看>>
SQLite 入门教程(二)创建、修改、删除表
查看>>
jQuery学习笔记:核心(jQuery Core)
查看>>
数据结构实验五:查找
查看>>
什么是域名的TTL值? ——一条域名解析记录在DNS缓存服务器中的存留时间
查看>>
三种备份还原功能
查看>>
Spring基础知识
查看>>
Matlab的regionprops详解
查看>>