标签:栈 合法括号 longest valid parent leetcode
【问题描述】
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.【屌丝代码】
完成失败!
达成思想:
1)字符串截取,取到第一个‘(‘为字符串首元素;
2)字符串的元素小于等于1,合法长度判断为0;
3)依次查找每一个正括号为首元素最长合法长度;
卡壳部分:
1)未能实现每一个正括号为首元素的最长合法长度计算!
3.【AC源码】
// LeetCode, Longest Valid Parenthese
// 使用栈,时间复杂度 O(n),空间复杂度 O(n)
class Solution {
public:
int longestValidParentheses(string s) {
int max_len = 0, last = -1; // the position of the last ')'
stack<int> lefts; // keep track of the positions of non-matching '('s
for (int i = 0; i < s.size(); ++i) {
if (s[i] =='(') {
lefts.push(i);
}
else {
if (lefts.empty()) {
// no matching left
last = i;
}
else {
// find a matching pair
lefts.pop();
if (lefts.empty()) {
max_len = max(max_len, i-last);
}
else {
max_len = max(max_len, i-lefts.top());
}
}
}
}
return max_len;
}
};
1)脑子没想好就不要动手写代码,写代码也是信马由缰毫无效率,思路不成熟的上手,在有限时间内,对任务的完成只会徒增恐惧感与无助感;
2)对于一个没想清楚的问题,去反问一句这是不是关键问题,如果是,就把它想透再下手!
比如本例:最相近的两个符号找到之后,它们是不是一定成对,如果成对接下去是怎么办?之前和止呕的操作分别是什么?!坚决将这个问题的求解出来的态度是伟大光荣而正确的!
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode 之 Longest Valid Parentheses
标签:栈 合法括号 longest valid parent leetcode
原文地址:http://blog.csdn.net/u013630349/article/details/47016773