32. Longest Valid Parentheses
1.問題

2.想法
提問
如果不連續的()括號對, 是否可以累積?
function header, parameter
test input
說明想法
依題意是如果括號對不連續, 則必須重新計算長度
因此除了用stack儲存()外, 必須用stack儲存()在字串中的位置
當()()時, ()(會先被pop, 剩下___), 長度等同於3 - (-1) =4
當())()時,()會先被pop, 剩下__)_),長度等同於4 - 2 =2
每一次計算新的window長度時, 與先前的相比取最大值
測試計算複雜度: O(n)
3.程式碼
class Solution {
public:
int longestValidParentheses(string str) {
int window = 0;
stack<char> ss;
stack<int> num;
num.push(-1);
int size = str.size();
for (int i =0; i < size; i++) {
if (str[i] == '(') {
ss.push('(');
num.push(i);
} else {
if (ss.empty() || ss.top() == ')'){
ss.push(')');
num.push(i);
} else {
ss.pop();
num.pop();
window = max(window, i - num.top());
}
}
}
return window;
}
};
Last updated