#给定字符串,仅包含左括号和右括号,设计算法,找出最长匹配的括号子串,返回该子串的长度。
如:
- (() 2
- ()() 4
- ()(()) 6
- (()()) 6
分析:
- 如果c为左括号,入栈
- 如果c为右括号
- 如果栈空,则start=i;
- 如果栈不空,则匹配成功,出栈
- 如果出栈后,栈为空,则计算匹配的长度i-strat,如果大于MAX,则更新
- 如果出栈后,栈不空,则计算匹配长度i-s.top(),如果大于MAX,则更新
要注意的是:
一开始我们设定start=-1,而且start每次都是在第一个匹配的左括号的前面一个位置,这样i-start,就是我们需要的长度。
如:
-1 | 0 | 1 | 2 | |
---|---|---|---|---|
空 | ( | ) | ||
-1 | 0 | 1 | 2 | |
空 | ) | ( | ) |
第一次,start=-1, i=1 长度为2;
第二次,start=0, i=2 长度为2;
1 |
|