找出最长的有效括号内子括号的长度
CSDN编程挑战里的题目
给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。
举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效
双括号数1个,故它的长度为 2。 再比如对于字符串") () () )",其中最长的有效
的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 再比如对于
"( () () )",它的长度为6。 换言之,便是有效双括号"()"数的两倍。 给
定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。
我提交的程序CSDN反馈是有问题,但又没给说具体的出错测试用例.所以我也没有再进一步调试,感觉我的代码没问题.
1 #include <stdio.h> 2 #include <iostream> 3 #include <string> 4 5 #include <cmath> 6 #include <cfloat> 7 #include <cstring> 8 #include <cstdio> 9 10 int longestValidParentheses(const char* s) 11 { 12 int len = strlen(s); 13 int leftBracket[256]; 14 memset(leftBracket, 0, sizeof(leftBracket)); 15 int rst = 0; 16 int lastStart = 65535; 17 int leftBracketNum = 0; 18 for (int i = 0; i < len; i++) 19 { 20 if (s[i] == '(') 21 { 22 leftBracket[leftBracketNum] = i; 23 leftBracketNum++; 24 } 25 else if (s[i] == ')') 26 { 27 if (leftBracketNum) 28 { 29 leftBracketNum--; 30 if (leftBracket[leftBracketNum] < lastStart) 31 { 32 rst = i - leftBracket[leftBracketNum] + 1; 33 lastStart = leftBracket[leftBracketNum]; 34 } 35 else 36 { 37 rst = i - lastStart + 1; 38 } 39 } 40 else 41 { 42 lastStart = 65535; 43 } 44 } 45 } 46 47 return rst; 48 }