题目描述:
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”
解题步骤:
该题首先先到可以采用动态规划求解。除此之外,还可以使用堆栈法来求解,通过栈数据结构来保存数据。
(1)栈stack保存字符
(2)栈pos保存字符在字符串中的索引位置
(3)当字符加入到stack时,索引位置也加入到pos;当字符从stack弹出时,索引位置也从pos弹出
(4)这样,最终就会获得pos,pos中的所有元素都表示不是有效括号的位置,前后两个位置两两相减就可以得到有效括号长度。
代码:
public int longestValidParentheses(String s) {
Stack<Character> stack = new Stack<Character>();//用于存放栈中所有元素
Stack<Integer> pos = new Stack<Integer>();