LeetCode-Longest Valid Parentheses-最长匹配括号-栈的应用
2014-10-04 21:21
477 查看
https://oj.leetcode.com/problems/longest-valid-parentheses/
这题一直没有把问题想清楚,浪费了不少时间。最终解法如下:
1)第一次遍历所有元素,用一个栈记录还没有匹配的"("括号的位置,在遇到")"括号匹配时出栈一个元素。
2)用一个bool 数组当做map,在有括号被匹配时将这之间的元素置为true.
3)最后遍历一遍bool数组,求出最大连续的true个数即可。这种求最大连续个数的问题可以只用一个count,在false时不断清零即可。
这题一直没有把问题想清楚,浪费了不少时间。最终解法如下:
1)第一次遍历所有元素,用一个栈记录还没有匹配的"("括号的位置,在遇到")"括号匹配时出栈一个元素。
2)用一个bool 数组当做map,在有括号被匹配时将这之间的元素置为true.
3)最后遍历一遍bool数组,求出最大连续的true个数即可。这种求最大连续个数的问题可以只用一个count,在false时不断清零即可。
class Solution { public: int n,m; int longestValidParentheses(string s) { n=s.length(); stack <int> st; vector <bool> flags(n,false); for (int i=0;i<n;i++){ if (s[i]=='('){ st.push(i); continue; } if (s[i]==')'){ if (!st.empty()){ int l=st.top(); for (int j=l;j<i+1;j++){flags[j]=true;} st.pop(); } } } int count=0; int res=0; for (int i=0;i<n;i++){ if (flags[i]){ count++; res=max(res,count); } else{ count=0; } } return res; } };
相关文章推荐
- Longest Valid Parentheses(最长的括号匹配)【面试算法leetcode】
- LeetCode | 32. Longest Valid Parentheses——最长有效括号匹配长度
- LeetCode | Longest Valid Parentheses(最长有效的括号匹配)
- LeetCode: Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- 【LeetCode】最长括号匹配Longest Valid Parentheses
- LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习
- leetcode32 Longest Valid Parentheses 最长有效括号序列
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- LeetCode 32 Longest Valid Parentheses(最长有效括号)(*)
- LeetCode 32 Longest Valid Parentheses (栈,括号匹配)
- 求最长有效匹配括号子串的长度(Longest Valid Parentheses)
- 最长连续有效括号 Longest Valid Parentheses @LeetCode
- [LeetCode] Longest Valid Parentheses 最长有效括号
- 【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】
- LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- Longest Valid Parentheses:最长括号子段匹配
- 【leetcode】括号符匹配问题(Parentheses):Valid Parentheses|Generate Parentheses|LongestValid Parentheses
- LeetCode - 32 - Longest Valid Parentheses(括号匹配)
- LeetCode Longest Valid Parentheses 括号匹配