题目链接:括号字符串的最长有效长度
题目描述:给定一个括号字符串str,返回最长的能够完全正确匹配括号字符字串的长度。
输入一行字符串,输出一个整数,代表括号字符串的最长有效长度。
样例:
输入:
(()())
输出:
6
输入:
())
输出:
2
思路:利用两个变量left和right分别记录当前字串左括号和右括号的数量,正着检查一遍,再倒着检查一遍。正着做的时候,以左括号为参照,如果当前左括号数量等于右括号,记录答案为右括号数量的两倍,如果当前左括号数量小于右括号,重置left和right。倒着遍历的时候则以右括号为参照。
代码:
import java.util.*;
public class Main{
static int getMaxSeqLength(String str){
int n=str.length();
if(n==0||n==1) return 0;
int left=0,right=0;
int ans=0;
for(int i=0;i<n;i++){
char c=str.charAt(i);
if(c=='(') left++;
else right++;
if(left==right){
ans=ans>right*2?ans:right*2;
}if(left<right){
left=0;
right=0;
}
}
left=0;
right=0;
for(int i=n-1;i>=0;i--){
char c=str.charAt(i);
if(c=='(') left++;
else right++;
if(left==right){
ans=ans>left*2?ans:left*2;
}else if(left>right){
left=0;
right=0;
}
}
return ans;
}
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
while(cin.hasNext()){
String str=cin.nextLine();
System.out.println(getMaxSeqLength(str));
}
}
}