CSDN编程挑战里的题目
给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。
举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 再比如对于"( () () )",它的长度为6。 换言之,便是有效双括号"()"数的两倍。 给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。我提交的程序CSDN反馈是有问题,但又没给说具体的出错测试用例.所以我也没有再进一步调试,感觉我的代码没问题.
1 #include2 #include 3 #include 4 5 #include 6 #include 7 #include 8 #include 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 else36 {37 rst = i - lastStart + 1;38 }39 }40 else41 {42 lastStart = 65535;43 }44 }45 }46 47 return rst;48 }