/**
* 最长有效括号的长度
*
题目详情
给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。
举几个例子如下:
例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。
再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。
再比如对于"( () () )",它的长度为6。
换言之,便是有效双括号"()"数的两倍。
* @param s
* @return
*/
public int longestValidParentheses(String s)
{
int count = 0; //匹配的括号的个数
char []chars = s.toCharArray(); //将字符串转换为字符数组
Stack<Character> list = new Stack<>(); //此功能用栈实现
char ch;
for (int i = 0; i < chars.length; i++)
{
ch = chars[i];
if(i == 0)
{
if(ch == ')') //第一个是)的话不可能匹配到正确的括号
{
continue;
}
else
{
list.push(ch);
}
}
else
{
if(list.size() == 0)
{
if(ch == ')') //栈里面没有字符的话)也不可能匹配到括号
{
continue;
}
}
list.push(ch);
//找到栈顶的第一个和第二个元素,看看它们是否是正确的括号
if(list.get(list.size() - 1) == ')' && list.get(list.size() - 2) == '(')
{
list.pop(); //如果是正确的话将一对括号出栈
list.pop();
count++;
}
}
}
return count * 2;
}
转载于:https://www.cnblogs.com/chinayfhuang/p/3530708.html