需求:
给定一个括号序列(只包括"("和")"),求其中最长的有效括号序列长度。
分析:
和判断括号序列是否是有效的算法方法一致,需要借助栈的先进后出的特性完成。
1、创建boolean型数组result[],result[i]代表角标i的序列符号是否是有效序列中的一员,初始化为false。
2、遍历括号序列,如果是左括号,就将左括号和其在序列中的角标存到栈中,如果是右括号,就判断栈是否是空的,如果是空的,那么继续向后遍历,如果不是空的,说明这时有匹配的括号对,将该右括号对应的result元素设为true,并且提取栈顶元素中的左括号的角标,将其对应的result元素设为true,并把栈顶元素pop出去。
3、result数组中存储的是false或true,true代表是有效序列的一员,我们只需遍历该数组,计算连续出现true的序列的最大长度即可,然后返回。
代码:
/*
* 需求:
* 给定一个括号序列,返回有效括号序列的最长长度
* 分析:
* 1、创建boolean型数组,代表当前角标处的括号是否是有效序列中的一员,初始化为false
* 2、遍历括号序列,如果是左括号,将左括号和其对应的角标存到栈中,如果是右括号,看栈是否是空的,如果是空的就向下遍历,如果不是空的,那么说明栈顶和该右括号匹配了,把这两个括号在boolean数组中对应的元素设为true