题目
Given a string containing just the characters '('
and ')'
, find the length of the longest valid (well-formed) parentheses substring.
For "(()"
, the longest valid parentheses substring is "()"
, which has length = 2.
Another example is ")()())"
, where the longest valid parentheses substring is "()()"
, which has length = 4.
思路
1. 状态模拟题, 最不喜欢的题目
2. 参考别人的思路, o(n) 完美解决, 漂亮的代码
3. stack 并不存字符, 而是存储左括号的位置, 失去匹配的右括号作为分隔符
代码
class Solution { public: int ans; int sum; int longestValidParentheses(string s) { ans = sum = 0; deque<int> stack; if(s.size() <= 0) return 0; int last = -1; for(int i = 0; i < s.size(); i ++) { if(s[i] == '(') { stack.push_back(i); }else{ if(stack.empty()) { last = i; }else{ stack.pop_back(); if(stack.empty()) { ans = max(ans, i-last); }else{ ans = max(ans, i-stack.back()); } } } } return ans; } };