第一次挑战失败了,现在又重新修改了一下自己的代码,但是发现不能再次挑战了,只好把代码放在这里,希望大家能够批评指正,我也不知道是否符合题目要求。
原题:
给定只包含字符'('和')'的字符串,请找出最长的有效括号内子括号的长度。举几个
例子如下:例如对于"(()",最长的有效的括号中的子字符串是"()",有效双括号数
为1个,故它的长度为2。再比如对于字符串")()())",其中最长的有效的括号中的
子字符串是"()()",有效双括号数2个,故它的长度为4。再比如对于"(()())",它
的长度为6。换言之, 便是有效双括号"()"数的两倍。给定函数原型
int longestValidParentheses(String s),请完成此函数,实现上述功能。
public static int longestValidParentheses(String s){
int count=0; //用于记录括号的对数
final String strLeft = "(";
final String strRight = ")";
char[] parentheses = s.toCharArray(); //将字符串转换成字符数组
Stack<String> stack = new Stack<String>();
int length = s.length(); //字符串的长度
for(int i=0; i<length; i++){
if(stack.isEmpty()){ //首次循环,栈空 把元素放入栈
if(parentheses[i] == '(')
stack.push(strLeft);
else
stack.push(strRight);
}else
{
String temp = stack.peek(); //获取栈顶元素
if(parentheses[i]==')' && temp!=strLeft){
if(parentheses[i] == '(')
stack.push(strLeft);
else
stack.push(strRight);
}else if(parentheses[i]==')' && temp==strLeft){
stack.pop(); //配对成功,弹出栈中的元素
count++;
}else{
if(parentheses[i] == '(')
stack.push(strLeft);
else
stack.push(strRight);
}
}
}
return 2*count;
}