LeetCode算法入门- Longest Valid Parentheses -day12
Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
题目描述:
题目的意思是给定一个括号序列的字符串,找到最长有效括号子序列的长度。
Example 1:
Input: “(()”
Output: 2
Explanation: The longest valid parentheses substring is “()”
Example 2:
Input: “)()())”
Output: 4
Explanation: The longest valid parentheses substring is “()()”
思路分析:
此题同样可以用堆这个结构来实现,建立一个堆栈来存放字符在字符串中的位置,遍历整个数组,如果遇到左括号,则当前位置入栈;如果遇到右括号,则弹出栈顶元素,这个时候分成两种情况讨论:
- 如果此时栈为空,表示弹出的并非左括号,匹配失败,需要将当前位置入栈表示匹配的初始值
- 如果此时栈不为空,表示此次匹配成功,这是匹配的长度为当前位置减去栈顶元素的值;
算法实现如下:
class Solution {public int longestValidParentheses(String s) {Stack<Integer> stack = new Stack<>();//为了方便计算push一个匹配开始位置的前一个位置stack.push(-1);int result = 0;for(int i = 0; i < s.length(); i++){if(s.charAt(i) == '('){stack.push(i);}else{stack.pop();//空时表示匹配失败,将当前元素的位置push进去if(stack.isEmpty()){stack.push(i);}else{//i - stack.peek()表示当前匹配的长度,取最大值result = Math.max(result, i - stack.peek());}}}return result;}
}