Lintcode423 Valid Parentheses solution 题解

【题目描述】

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

给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。

【题目链接】

www.lintcode.com/en/problem/valid-parentheses/

【题目解析】

采用的做法为先将所有合法的独立子串标记出来。这里给定的独立子串,其定义为:

该子串是合法子串,且开头的'('与')'是匹配的

举个例子:

"()","(()())","((())())","(()(())())" 都是独立子串。

而"()()","(())()","()()(())",虽然都是合法子串,但是它们第一个'('和最后一个')'并不是匹配的。并且它们可以再分解为2个合法的独立子串,比如"(())()"可以分解为"(())"和"()"。

我们可以用栈来模拟这个过程,将匹配的括号标记出来。

接下来我们开始寻找最长的合法子串,显然的有最长合法子串一定是由一个或连续多个独立子串构成。

我们再扫描一次整个字符串,将连续的独立子串累加。当出现断开时,将长度重置。

此时累加值最大的连续独立子串就是我们要求得的最长合法子串。

【参考答案】

www.jiuzhang.com/solutions/valid-parentheses/



 

转载于:https://my.oschina.net/u/3782005/blog/1793783

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值