首页 > 代码库 > 32. Longest Valid Parentheses
32. Longest Valid Parentheses
一、题目
1、描述
2、题意
求满足括号闭合规则的最大子串长度
二、解答
1、思路:
刚开始想到的是前面的判断这个字符串是否满足闭合规则的方法,即建一个Stack,当为‘(‘ 时候,‘)‘ 入栈,当为 ‘)‘ 时候,判断栈顶是否为 ‘)’, 这种方法未解决 ()(() 这种情况。看到网上大神的方法,是记录每个字符的下标,让匹配的后面的‘)‘的下标减去前面起始的‘(’的下标,即为 跨度。
public static int longestValidParentheses3(String s) { Stack<Integer> stack = new Stack<Integer>(); int max = 0; int left = -1; for(int i = 0; i < s.length(); i++) { if(s.charAt(i) == ‘(‘) stack.push(i); // 记录下标 else { if(stack.isEmpty()) left = i; else { stack.pop(); if(stack.isEmpty()) max = Math.max(max, i - left); else max = Math.max(max, i - stack.peek()); } } } return max; }
方法二: 优化
public static int longestValidParentheses4(String s) { LinkedList<Integer> stack = new LinkedList<Integer>(); int result = 0; stack.push(-1); // i-stack.peek() == 有效长度 for(int i = 0; i < s.length(); i++) { if(s.charAt(i) == ‘)‘ && stack.size() > 1 && s.charAt(stack.peek()) == ‘(‘) { stack.pop(); result = Math.max(result, i-stack.peek()); } else { stack.push(i); } } return result; }
32. Longest Valid Parentheses
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。