leetcode做题记录0032

leetcode 0032

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述

思路

题目就是求括号匹配的最长子串。

可以化成下标来看,把序号和字符绑在一起作为栈的元素。

整个字符串经过栈后,栈中只剩下了那些无法去除的字符和相应的索引。

算出相邻索引间的最大间距即为最长匹配子串的长度,注意边界条件。

class Solution {
    public int longestValidParentheses(String s) {
		LinkedList<ArrayList<Object>> stack = new LinkedList<ArrayList<Object>>();
		for (int i = 0; i < s.length(); i++) {
			ArrayList<Object> info = new ArrayList<Object>();
			info.add(i);
			info.add(s.charAt(i));
			if (stack.isEmpty()) {
				stack.add(info);
			} else {
				ArrayList<Object> temp = stack.pollLast();
				if ((Character) temp.get(1) != '(' || s.charAt(i) != ')') {
					stack.add(temp);
					stack.add(info);
				}
			}
		}
		List<Integer> index = new ArrayList<Integer>();
		for (List<Object> temp : stack) {
			index.add((Integer) temp.get(0));
		}
		if (index.size() == 0) {
			return s.length();
		}
		int max = index.get(0) > s.length() - 1 - index.get(index.size() - 1) ? index.get(0)
				: s.length() - 1 - index.get(index.size() - 1);
		for (int i = 1; i < index.size(); i++) {
			if (index.get(i) - index.get(i - 1) - 1 > max) {
				max = index.get(i) - index.get(i - 1) - 1;
			}
		}
		return max;
	}
}
发布了77 篇原创文章 · 获赞 1 · 访问量 2062

猜你喜欢

转载自blog.csdn.net/Paul_1i/article/details/105010373