Description
Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
Example
Example 1:
Input: “(()”
Output: 2
Explanation: The longest valid parentheses substring is “()”
Example 2:
Input: “)()())”
Output: 4
Explanation: The longest valid parentheses substring is “()()”
Analyse
題目就是題意,要求你找出最長的有效括號對,並輸出其長度。我們可以通過棧的形式去匹配括號,在匹配的同時,要是有不滿足匹配的括號情況出現,將其位置留在棧中,那麼兩個位置之間長度即是我們有效匹配括號對的長度,然後在其之中找出最長的即可。
Code
class Solution {
public:
int longestValidParentheses(string s) {
int n = s.length(), longest = 0;
stack<int> st;
for (int i = 0; i < n; i++) {
if (s[i] == '(') st.push(i);
else {
if (!st.empty()) {
if (s[st.top()] == '(') st.pop();
else st.push(i);
}
else st.push(i);
}
}
if (st.empty()) longest = n;
else {
int a = n, b = 0;
while (!st.empty()) {
b = st.top(); st.pop();
longest = max(longest, a - b - 1);
a = b;
}
longest = max(longest, a);
}
return longest;
}
};