leetcode习题解答:32. Longest Valid Parentheses
来源:互联网 发布:nginx lua 全局函数 编辑:程序博客网 时间:2024/06/14 01:17
难度:Hard
链接
描述:
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.
思路:之前做了个生成有效的括号串的题,最开始想用左右括号的数量关系来解决,想了半天,没效果,因为光凭数量关系是很难区分有效子串是否连在一起,放弃了。
之后决定使用这个方法:把不符合规则的字符替换为空格,这样就能得出,一堆子串,再比较他们长度就行。
那怎么做到呢?可以使用栈来实现,对于左括号,将其index入栈,遇到右括号,就出栈,当栈空时遇到右括号,可以直接判断这个右括号是无效的。
最终栈中剩下的index,则是无效左括号的index,将它们全部赋值为空格。
最后扫描整个字符串,得出最长有效子串,完成。
代码:
#include <vector>class Solution {public: int longestValidParentheses(string s) { std::vector<int> wl; //use vector as a stack int l = 0; for (int i = 0; i < s.size(); i++){ if (s[i] == ')' && l == 0){ s[i] = ' '; } else if (s[i] == ')' && l != 0){ wl.pop_back(); l--; } else if (s[i] == '('){ wl.push_back(i); l++; } } for (int i = 0; i < wl.size(); i++){ s[wl[i]] = ' '; } int max = 0; int temp = 0; for (int i = 0; i < s.size(); i++){ if (s[i] != ' '){ temp++; } else { if (temp > max) max = temp; temp = 0; } } if (temp > max) return temp; else return max; }};
阅读全文
0 0
- leetcode习题解答:32. Longest Valid Parentheses
- LeetCode --- 32. Longest Valid Parentheses
- LeetCode 32.Longest Valid Parentheses
- [Leetcode] 32. Longest Valid Parentheses
- [LeetCode]32.Longest Valid Parentheses
- [leetcode]32.Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- LeetCode 32. Longest Valid Parentheses
- [leetcode] 32. Longest Valid Parentheses
- LeetCode 32. Longest Valid Parentheses
- LeetCode-32.Longest Valid Parentheses
- leetcode.32. Longest Valid Parentheses
- 【leetcode】32. Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- [LeetCode] 32. Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- leetcode 32.Longest Valid Parentheses
- 手动添加jar包到本地maven仓库(已测)ok
- 20171102|每日练习
- Camera之Demosaic---双线性插值
- PHP 判断时间是否为当天时间
- 98. Validate Binary Search Tree
- leetcode习题解答:32. Longest Valid Parentheses
- 【unix学习】文件处理4—sed + wget + awk命令
- Android NDK开发(一):准备工作(CMake方式)
- WEB前端入门-HTML5基础概述
- UI Testing初探之元素定位
- 八大排序算法总结与Java实现
- 如何添加一个百科推词条
- git flow
- 《设计模式》pdf下载