【LeetCode】32. Longest Valid Parentheses - Java實現
阿新 • • 發佈:2018-12-09
文章目錄
1. 題目描述:
Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
Example 1:
Input: “(()”
Output: 2
Explanation: The longest valid parentheses substring is “()”
Example 2:
Input: “)()())”
Output: 4
Explanation: The longest valid parentheses substring is “()()”
2. 思路分析:
題目的意思是給定一個括號序列的字串,找到最長有效括號子序列的長度。
此題可用棧來實現,建立一個棧用來存放字元在字串中的位置,遍歷整個字串,如果遇到左括號,則當前位置入棧;如果遇到右括號,則彈出棧頂元素,此時分2種情況討論:
(1)如果此時棧不為空,則表示此次成功匹配,這時匹配的長度為當前位置減去棧頂元素值;
(2)如果此時為空,則表示彈出的並非左括號,而是起始位置標識值,則表示此次匹配失敗,則需要當前位置入棧表示下次匹配的起始值。
3. Java程式碼:
原始碼
:見我GiHub主頁
程式碼:
public static int longestValidParentheses(String s) {
Stack<Integer> stack = new Stack<>();
// 為了方便計算push一個匹配開始位置的前一個位置
stack.push(-1);
int maxLen = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack. push(i);
} else {
stack.pop();
if (stack.isEmpty()) { // 表示未匹配,重新push下一次匹配開始位置的前一個位置
stack.push(i);
} else {
// i-stack.peek()表示當前匹配的長度
maxLen = Math.max(maxLen, i - stack.peek());
}
}
}
return maxLen;
}