LeetCode_Longest Valid Parentheses
2015-09-15 11:01
267 查看
Given a string containing just the characters
find the length of the longest valid (well-formed) parentheses substring.
For
which has length = 2.
Another example is
is
分析:题目要求找出一个只包含了“(” 和 “)” 的字符串中最大的合法匹配的长度,比如
可以考虑使用栈的数据结构,result维护一个最大的长度,循环遍历该字符串:
1、若遍历到“(”,则进栈;
2、若遍历到“)”,需要分析:
a)
若此时栈不为空,且栈顶为“(”,那么将该栈顶元素出栈。出栈后若栈为空,则返回i+1和result这两个中最大的一个;出栈后该栈不为空,则将i减去栈顶元素的值和result比较,较大的保存到result中。
b)
若此时栈为空,或栈顶为“)”,那么将该元素进栈。
Java解题:
public static int longestValidParentheses(String s) {
char c[] = s.toCharArray();
List<Integer> list = new ArrayList<Integer>();
int result=0;
for(int i=0;i<s.length();i++){
if(c[i]=='(')
list.add(i);
else{
if(!list.isEmpty()&&c[list.get(list.size()-1)]=='('){
list.remove(list.size()-1);
if(list.isEmpty())
result=Math.max(result, i+1);
else
result=Math.max(result, i-list.get(list.size()-1));
}
else
list.add(i);
}
}
return result;
}
'('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.
分析:题目要求找出一个只包含了“(” 和 “)” 的字符串中最大的合法匹配的长度,比如
")()())",的最大合法匹配是4
可以考虑使用栈的数据结构,result维护一个最大的长度,循环遍历该字符串:
1、若遍历到“(”,则进栈;
2、若遍历到“)”,需要分析:
a)
若此时栈不为空,且栈顶为“(”,那么将该栈顶元素出栈。出栈后若栈为空,则返回i+1和result这两个中最大的一个;出栈后该栈不为空,则将i减去栈顶元素的值和result比较,较大的保存到result中。
b)
若此时栈为空,或栈顶为“)”,那么将该元素进栈。
Java解题:
public static int longestValidParentheses(String s) {
char c[] = s.toCharArray();
List<Integer> list = new ArrayList<Integer>();
int result=0;
for(int i=0;i<s.length();i++){
if(c[i]=='(')
list.add(i);
else{
if(!list.isEmpty()&&c[list.get(list.size()-1)]=='('){
list.remove(list.size()-1);
if(list.isEmpty())
result=Math.max(result, i+1);
else
result=Math.max(result, i-list.get(list.size()-1));
}
else
list.add(i);
}
}
return result;
}
相关文章推荐
- C++基于栈实现铁轨问题
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- java数据结构之java实现栈
- 浅析栈区和堆区内存分配的区别
- 用Java代码实现栈数据结构的基本方法归纳
- 用PHP解决的一个栈的面试题
- 浅谈C#中堆和栈的区别(附上图解)
- JavaScript数据结构与算法之栈详解
- C语言之栈和堆(Stack && Heap)的优缺点及其使用区别
- Python实现栈的方法
- Java中堆和栈的区别详解
- java中堆和栈的区别分析
- C/C++函数调用栈的实现方法
- C++中静态存储区与栈以及堆的区别详解
- C++中用栈来判断括号字符串匹配问题的实现方法
- C++中栈结构建立与操作详细解析