32. Longest Valid Parentheses

输入:一个字符串s,只包含字符(和)
输出:一个整数,表示最长括号匹配子串的长度。
规则:括号匹配的字符是指每有一个‘(’字符就有对应的‘)’。 其他 情况都是无效的。
暴力算法分析:取字符串s的每一个子串,然后用 stack判断字符串是否括号匹配的字符串。时间复杂度O(n3)O(n^3)O(n3)

	public int longestValidParentheses(String s) {int n = s.length();int maxlength = 0;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(validate(s.substring(i,j+1))){maxlength = Math.max(maxlength,j+1-i);}}}return maxlength;}private boolean validate(String s ){Stack<Character> stack = new Stack<Character>();for(int i=0;i<s.length();i++){char ch = s.charAt(i);if(!stack.isEmpty()){if(ch==')' && stack.peek()=='('){stack.pop();}else{stack.push(s.charAt(i));}}else{stack.push(s.charAt(i));}}return stack.isEmpty();}

动态规划思路:用dp[i] = 以第i个元素为结尾的子串的最长括号匹配子串的长度。
dp初始化为0。
显然括号匹配子串一定以)结尾,那么如果s[i]=’(’,那么dp[i]=0。
如果s[i]=’)‘并且s[i-1]=’(’,也就是字符串形如’…()’,那么dp[i] = 2 + dp[i-2]。

如果s[i]=’)‘并且s[i-1]=’)’,也就是字符串形如’…))’,如果在i-1位置之前有对应第i个元素对应的(字符,那么字符串形如’…(有效子串si−1s_{i-1}si1)’,那么(的下标应该是i-1-dp[i-1]。
如果s[i-dp[i-1]-1]=’(’,那么dp[i] = dp[i-1]+2 + dp[i-dp[i-1]-2]。因为(字符前面可能还有字符,其长度为dp[i-dp[i-1]-2]。
例如s=’(()))(())’,在计算dp[7]的时候,因为dp[6]=2,所以与其对应的(位置在7-1-dp[7-1]=4。从0到3还是一个括号匹配字符,长度为dp[3]。所以dp[7] = dp[6]+2+dp[3]=8。

01234567
00240028
	public int longestValidParenthesesV2(String s) {int n = s.length();int[] dp = new int[n];int max = 0;for(int i = 1;i<n;i++){if(s.charAt(i)==')'){if(s.charAt(i-1) == '('){dp[i] = (i>=2?dp[i-2]:0)+2;}else if(i-dp[i-1] > 0 && s.charAt(i-dp[i-1]-1)=='('){dp[i] = dp[i-1] + (i-dp[i-1]-2>=0? dp[i-dp[i-1]-2]:0) + 2;}}max = Math.max(max, dp[i]);}return max;}

双指针思路:用两个指针left、right分别表示 遇到的 左括号、右括号的个数。
首先从左向右遍历,遇到(,left++;遇到),right++。当left=right的时候,括号匹配长度=2*left。记录遇到的最大长度。如果right>left,则说明子串无效,重置为0。
其次,从右向左,遍历一次。
最后得到最大长度。

	public int longestValidParenthesesV3(String s) {int n = s.length();int max = 0;int left=0,right = 0;for(int i=0;i<n;i++){if(s.charAt(i) =='('){left++;}else{right++;}if(left == right){max = Math.max(max, 2*left);}else if(right>left){left = right = 0;}}left = right = 0;for(int i=n-1;i>=0;i--){if(s.charAt(i) =='('){left++;}else{right++;}if(left == right){max = Math.max(max, 2*left);}else if(left>right){left = right = 0;}}return max;}

参考链接:力扣官方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring学习(41):属性注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

【JS】实时监控页面,input框数值自动求和

需求&#xff1a; 有一个页面需要将input框填入的各个费用自动相加&#xff0c;添加到“合计费用”里。 解决方案&#xff1a; 使用jquery的blur实践&#xff0c;每个费用的Input框检测到失去焦点时&#xff0c;将所有的input框数值相加求和&#xff0c;然后写入到“合计费用”…

spring学习(30):定义第一个bean

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

通过字符串引入模块下的属性

flask中可以配置一个字符串导入settings下的配置文件 app.config.from_object("settings.ProductionConfig")这里就是来讲解一下这个到底是怎么实现的。 例&#xff1a; 这是just_xxx.py里面的内容 # -*- coding: utf-8 -*- # Time : 2019/6/17 上午 11:50 # Auth…

392. Is Subsequence

写得好的解题思路链接&#xff1a;url1 url2(动态规划写的比较好) 输入&#xff1a;两个字符串s和t&#xff0c;t可能会很长 输出&#xff1a;s是否是t的子序列。 规则&#xff1a;字符串子序列的定义是&#xff1a;通过删除字符串t的部分字符但是不能改变字符相对位置&#x…

spring学习(42):属性注入注入数组和列表的说明

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

spring学习(43):属性注入中注入引用对象

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

Dijkstrala算法

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 Dijkstrala算法查找图中从一个节点到另一个节点的最短路径&#xff0c;输出结果是最短路径以及长度。算法执行的前提条件是权重不能是负数。 起始顶点记为sid&#…

链表题目汇总(python3)

1、从头到尾打印链表 输入一个链表&#xff0c;按链表值从尾到头的顺序返回一个ArrayList。 # -*- coding:utf-8 -*- class ListNode:def __init__(self, x):self.val xself.next Noneclass Solution:def printListFromTailToHead(self, listNode):l []while listNode:l.appe…

spring学习(44):p名称空间注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

A*算法

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 Dijkstra不能解决的问题 在Dijkstra类似BFS&#xff0c;从起始节点找到距离最短的节点&#xff0c;一层一层向外扩展&#xff0c;直到找到目标节点。 在有些时候这种…

导入安全证书到jdk

一&#xff1a;.导入证书 1.打开doc窗口&#xff0c;打开cmd&#xff0c;执行命令&#xff1a; keytool -import -file f:\ca.crt -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -alias server-file 指定证书文件的位置 -alias 指定证书的别名 2.输入密钥库口令…

spring学习(45):util名称空间注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

拓扑排序两种实现方式

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 拓扑排序能解决的问题 在一个项目中会有很多源代码文件。编译器在编译代码的时候需要按照依赖关系&#xff0c;依次编译每个源文件。例如A.java依赖B.java&#xff…

Jmeter_http request的简单设置和应用

http request 协议、地址、端口号 参数类型 正则搜索 帮助文档 相等的关系 匹配正则的结果&#xff08;jmeter一般都用分组取想用的数据&#xff09; 转载于:https://www.cnblogs.com/rychh/articles/11087537.html

spring学习(46):spring的单例bean

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

943. Find the Shortest Superstring

目录题目描述暴力搜索分析暴力搜索优化动态规划参考链接题目描述 输入&#xff1a;字符串数组String[] A 输出&#xff1a;一个字符串result&#xff0c;A中每一个字符串是result的子串&#xff0c;并且reuslt是符合这个条件的最短的字符串。 举例&#xff1a; 输入: [“alex”…

install-info - 更新 info/dir 项

SYNOPSIS 总览 install-info [OPTION]... [INFO-FILE [DIR-FILE]] DESCRIPTION 描述 从 Info 目录文件 DIR-FILE 中的文件 INFO-FILE 中安装或删除 dir 目录项。 OPTIONS 选项 --delete删除 DIR-FILE 中的 INFO-FILE 里已有的项&#xff1b;不插入任何新项。--dir-fileNAME指定…

spring学习(47):bean的作用域

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

visual studio 2017 显示行号

1.Tools中选择Options...&#xff0c; Options界面中Test Editor -> All Languages&#xff08;当然也可以设置对应的语言&#xff09; -> General&#xff0c; 在Settings中勾选 Line numbers。 2.行号就显示出来了&#xff0c;便于我们去定位代码。 转载于:https://www…