给定一个字符串,求出最长的连续配对括号子串的长度

这个是在leetcode刷题的时候碰到的,被折磨了很久,所以印象比较深刻,拿出来说说,原题在
https://leetcode.com/problems/longest-valid-parentheses/
主要的意思是说,给定一个字符串,只包含左右括号( ),寻找最长的配对的子串并求其长度。比如”(()”最长配对是”()”,返回长度2;”)()()”最长配对子串是”()()”,返回长度4;

这个题目实际的复杂度比看起来要高,除了对各种输入串要返回正确结果外,对于一些复杂输入,比如前面 2000个(后面跟一个),如何实现快速的收敛,是很重要的,我的第一个递归算法,就是因为收敛太慢超过了运行的时间要求,最后只好放弃了。
最终的算法思想如下:
首先寻找两个相邻的最近的(),它们肯定是配对的;然后找后面的),有两个合法的情况,一是前面有相邻的配对的(,二是)和上一个(之间只有已经配对的(),否则都是不配对的情况;为了简单起见,我们把已经配对的()用一个特殊字符替换,以简化判断逻辑。代码如下:

public int longestValidParentheses(String 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值