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

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

题解


题目描述

Longest Valid Parentheses

即从只含有'('')'的字符串s中找出最长有效子串sub(s),返回该子串的长度len
如:s=")()())"",sub(s)="()()";len=4

题解

对字符串进行遍历,遇到相邻配对的'('')'则消去,并与此处存在的匹配子串(不存在即为空串)合并,并记录此处存在某个长度的匹配子串。并与已知最大长度比较,若大于则更新最大长度。类似于寻找无向图中最大匹配时建立交错树时的缩花操作。

例如s=")()())""。则有

  1. left = 0,right = 1,len = 0.
  2. s[left]=')'s[right]='('. 不匹配,遍历下一个:left = 1,right = 2.
  3. s[left]='('s[right]=')'. 匹配,消去:left = 0,right = 3. 并记录s[0]处有一个长度为2的有效子串,更新最大长度len = 2.
  4. s[left]=')'s[right]='('. 不匹配,遍历下一个:left = 3,right = 4.
  5. s[left]='('s[right]=')'. 匹配,消去:left = 0,right = 5,并与之前s[0]处记录的长度为2的有效子串合并,更新最大长度len = 4.
  6. s[left]=')'s[right]=')'. 不匹配,遍历下一个:left = 5,right = 6. 到达字符串s末尾,结束。
  7. 得到最长有效子串的长度为len = 4.

假设原字符串s长度为n,时间复杂度为O(n)

代码

typedef int _Type;class Solution {public:    int longestValidParentheses(const std::string& s) {        _Type left = 0, longest = 0, len = s.size();        std::vector<_Type> vec(len);        for (_Type i = 0; i < len; ) {            if (s[i] == '(') {                vec[left++] = i++;            } else if (s[i++] == ')' && left > 0) {                _Type tmp = i - vec[--left];                if (tmp > longest)                    longest = tmp;                if (i < len && s[i] == '(')                    vec[left++] = i++ - tmp;            }        }        return longest;    }};

总结

主要应用了缩花思想。

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

你可能感兴趣的文章
HDU-1878 欧拉回路(并查集,欧拉回路性质)
查看>>
Windows Oracle 11G R2搭建完全指南
查看>>
Unix,BSD,Linux三者有什么区别
查看>>
ACM中java的使用
查看>>
我的友情链接
查看>>
解决JSONObject类找不到的问题
查看>>
CXF3.0.2+Spring3.2.14 Web Service入门实例二
查看>>
利用c语言编写程序输出一个数的每一位(多种方法)
查看>>
GlobalSign 域名型 SSL 证书
查看>>
Linux与云计算——第二阶段Linux服务器架设 第七章:网站WEB服务器架设—用户目录虚拟主机和SSL...
查看>>
关于HTML5你必须知道的28个新特性,新技巧以及新技
查看>>
Java9最新特性有哪些?
查看>>
linux中/etc/passwd和/etc/shadow中各个字段的含义
查看>>
oracle之基本介绍及认证
查看>>
爱创课堂每日一题第十六天为什么HTTPS安全?
查看>>
风险预警·11g容易被忽略的导入性能问题
查看>>
如何找到使用驱动器中的光盘之前需要格式化硬盘的数据
查看>>
micro-mvc框架支撑mvc各层代码热部署
查看>>
MySQL数据库管理4
查看>>
四月技术指标实现过程
查看>>