Given a string containing just the characters '('
and ')'
, find the length of the longest valid (well-formed) parentheses substring.
Example 1:
Input: "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()"
Example 2:
Input: ")()())
" Output: 4 Explanation: The longest valid parentheses substring is"()()"
这个题的意思是求出字符串中存在的括号对并进行返回。
1)
class Solution {
public int longestValidParentheses(String s) {
int max = 0;
Stack<Integer> stack = new Stack<>();
stack.push(-1);//设立初值
for(int i = 0 ; i < s.length(); ++i){
if(s.charAt(i) == '('){
stack.push(i);
}else{
stack.pop();//如果匹配的话直接弹出
if(stack.isEmpty()){
stack.push(i);//如果为空了,情况为一直出现左括号没有有括号提前压栈
}else{
max = Math.max(max,i - stack.peek());//计算最大量
}
}
}
return max;
}
}
2)
public class Solution {
public int longestValidParentheses(String s) {
int left = 0, right = 0, maxlength = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
left++;
} else {
right++;
}
if (left == right) {
maxlength = Math.max(maxlength, 2 * right);
} else if (right >= left) {
left = right = 0;
}
}
left = right = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == '(') {
left++;
} else {
right++;
}
if (left == right) {
maxlength = Math.max(maxlength, 2 * left);
} else if (left >= right) {
left = right = 0;
}
}
return maxlength;
}
}
从左到右和从右向左进行扫。