[Leetcode] Longest Valid Parentheses
2014-04-01 01:06
288 查看
Given a string containing just the characters
For
Another example is
很多人会说这道题用动规,可是用动规每次匹配后还要向前到上一个匹配跟这个匹配是否连接,时间复杂度为O(n^2),其实可以换个想法,用一个bool数组来标记已经匹配过的字符,找到最长的连续标记的长度就是所求的结果。只要遍历两遍数组,时间复杂度为O(n)。
'('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.
很多人会说这道题用动规,可是用动规每次匹配后还要向前到上一个匹配跟这个匹配是否连接,时间复杂度为O(n^2),其实可以换个想法,用一个bool数组来标记已经匹配过的字符,找到最长的连续标记的长度就是所求的结果。只要遍历两遍数组,时间复杂度为O(n)。
class Solution { public: int longestValidParentheses(string s) { bool *a = new bool[s.length()]; memset(a, false, s.length()); stack<int> st; for (int i = 0; i < s.length(); ++i) { if (s[i] == '(') { st.push(i); } else if (s[i] == ')' && !st.empty()) { a[i] = true; a[st.top()] = true; st.pop(); } } int max_len = 0, cur_len = 0; for (int i = 0; i < s.length(); ++i) { if (a[i]) ++cur_len; else cur_len = 0; max_len = max(max_len, cur_len); } return max_len; } };
相关文章推荐
- LeetCode:Longest Valid Parentheses
- 最长连续有效括号 Longest Valid Parentheses @LeetCode
- [leetcode] Longest Valid Parentheses @python
- leetcode_c++:Longest Valid Parentheses(032)
- 【leetcode刷题笔记】Longest Valid Parentheses
- LeetCode Longest Valid Parentheses 括号匹配
- [LeetCode]Longest Valid Parentheses
- LeetCode "Longest Valid Parentheses"
- [LeetCode P32] Longest Valid Parentheses 四种解法
- LeetCode: Longest Valid Parentheses
- LeetCode32 Longest Valid Parentheses
- leetcode problem 32 -- Longest Valid Parentheses
- LeetCode | Longest Valid Parentheses(最长有效的括号匹配)
- leetcode -- Longest Valid Parentheses
- 【leetcode】String——Longest Valid Parentheses(32)
- [LeetCode]Longest Valid Parentheses
- [leetcode] Longest Valid Parentheses
- leetcode: Longest Valid Parentheses
- leetcode:Longest Valid Parentheses 使用动态规划O(n)思路
- leetcode第一刷_Longest Valid Parentheses