0%

leetcode 32 Solution

代码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.demo.s32;

import java.util.Deque;
import java.util.LinkedList;

/**
* 最长有效括号
* 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
*/
public class Solution {
public int longestValidParentheses(String s) {
int maxans = 0;
//新建一个栈 用来从左到右存括号字符串
Deque<Integer> stack = new LinkedList<Integer>();
//压一个初始长度-1
stack.push(-1);
for (int i = 0; i < s.length(); i++) {
//如果是左括号 就压栈
if (s.charAt(i) == '(') {
stack.push(i);
} else {
//右括号就弹出
stack.pop();
//弹出后如果空了就压当前i的值,表示有效子串开始的位置
if (stack.isEmpty()) {
stack.push(i);
} else {
//不为空就比较下 有效子串是否为最长 ,更新maxans
maxans = Math.max(maxans, i - stack.peek());
}
}
}
return maxans;

}
}