leetcode
来源:互联网 发布:河南用友软件总代理 编辑:程序博客网 时间:2024/05/30 22:45
Longest Valid Parentheses
Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
For “(()”, the longest valid parentheses substring is “()”, which has length = 2.
Another example is “)()())”, where the longest valid parentheses substring is “()()”, which has length = 4.
Solution1:
public int longestValidParentheses(String s) { if (s == null || s.length() < 2) { return 0; } int longest = 0; char[] chars = s.toCharArray(); LinkedList<Integer> stack = new LinkedList<>(); for (int i = 0; i < chars.length; i++) { if (chars[i] == '(') { stack.push(i); } else { if (stack.isEmpty()) { stack.push(i); } else { if (chars[stack.peek()] == '(') { stack.pop(); } else { stack.push(i); } } } } if (stack.isEmpty()) { longest = s.length(); } else { int begin = 0; int end = s.length(); while (!stack.isEmpty()) { begin = stack.pop(); longest = Math.max(longest, end - begin - 1); end = begin; } longest = Math.max(longest, end - 0); } return longest; }
Solution2:
public int longestValidParentheses(String s) { if (s == null || s.length() < 2) { return 0; } int longest = 0; int left = -1; char[] chars = s.toCharArray(); LinkedList<Integer> stack = new LinkedList<>(); for (int i = 0; i < chars.length; i++) { if (chars[i] == '(') { stack.push(i); } else { if (stack.isEmpty()) { left = i; } else { stack.pop(); if (stack.isEmpty()) { longest = Math.max(longest, i - left); } else { longest = Math.max(longest, i - stack.peek()); } } } } return longest; }
Solution3:
better
public int longestValidParentheses(String s) { int longest = 0; LinkedList<Integer> stack = new LinkedList<>(); stack.push(-1); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '(') { stack.push(i); } else { stack.pop(); if (stack.isEmpty()) { stack.push(i); } else { longest = Math.max(longest, i - stack.peek()); } } } return longest; }
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- Maximum Subarray Maximum Product Subarray 子数组的最大和 最大乘积
- 计算一段区间内的所有素数
- Android ADB命令
- leetcode
- POJ 3050 Hopscotch(DFS)
- leetcode
- IOS获取手机设备运行内存的方法
- 离开了公司,你还有什么
- leetcode
- poj 食物链(种类并查集)(思路)
- QML运行环境
- 主成分分析(PCA)
- 2008年分区联赛提高组第三题 传纸条
- Linux系统常见的目录说明