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;
}
}