32 最长有效括号
题目描述
给你一个只包含 '('
和 ')'
的字符串,找出最长有效(格式正确且连续)括号子串的长度。
输入输出样例
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
输入:s = ""
输出:0
解法一暴力解法
- 首先构建验证是否是有效函数的函数
- 接下来可截取字符串进行判断,从大到小进行截取
- 有两种方法,一种是两个for循环头尾遍历,一种是根据字符串出现的是2的倍数的性质逐次缩减范围
int longestValidParenthese(string s)
{
int maxlength=0;
int length=s.size();
if(length<=1)
{
return maxlength;
}
//双重for循环进行遍历
// for(int i=0;i<length;i++)
// {
// for(int j=length-1;j>=i;j--)
// {
// int lengthStr=j-i+1;
// string str=s.substr(i,lengthStr);
// if(isVaild(str))
// {
// maxlength=(lengthStr>maxlength)?lengthStr:maxlength;
// }
// }
// }
//以对数的形式增加
int moveLength=(length/2)*2;
int i=0;
string str;
for(i=0;moveLength>0;i++)
{
str=s.substr(i,moveLength);
if(isVaild(str))
{
maxlength=moveLength;
break;
}
if(i+moveLength>=length)
{
moveLength=moveLength-2;
i=-1;
}
}
return maxlength;
}