您的位置:首页 > 编程语言

挑战编程: 最长有效括号的长度

2013-07-22 17:19 288 查看
/*

给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。
举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。
再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。
再比如对于"( () () )",它的长度为6。
换言之,便是有效双括号"()"数的两倍。
给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。
*/

#include <iostream>
#include <string>

using namespace std;

int longestValidParentheses(string s);

int main()
{

while (1)
{
string str;
cin >> str;
int result = longestValidParentheses(str);
cout << result;
}

getchar();
return 0;
}

int longestValidParentheses(string s)
{
int result = 0;
int lenIndex = s.size();
int indexResult[1024] = {0};

for (int i = 0; i < lenIndex; i ++)
{
indexResult[i] = i;
}

int index = 0;
string content = s;

for (int i = 0; i < lenIndex - 1;)
{
char str[2];
str[0] = content[indexResult[i]];
str[1] = content[indexResult[i+1]];

if (content[indexResult[i]] == '(' && content[indexResult[i+1]] == ')')
{
//result = indexResult[i+1] - indexResult[i] + 1;
for (int j = i; j < lenIndex; j++)
{
indexResult[j] = indexResult[j+2];
}

lenIndex = lenIndex - 2;
i = 0;
}
else i ++;
}
if (lenIndex == 0)
{
result = s.size();
}
else if (lenIndex == s.size())
{
result = 0;
}
else
{
if(indexResult[0] != 0)
{
for (int i = lenIndex; i > 0; i--)
{
indexResult[i] = indexResult[i - 1];
}
indexResult[0] = -1;
lenIndex ++;
}

if (indexResult[lenIndex - 1] != s.size() - 1)
{
indexResult[lenIndex] = s.size();
lenIndex ++;
}

for(int i = 0; i < lenIndex - 1; i ++)
{
int max = indexResult[i+1] - indexResult[i] - 1;
if (max > result)
result = max ;
}
}

return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: