C练题笔记之:Leetcode-32. 最长有效括号
题目:
给定一个只包含 ( 和 ) 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()"
结果:
解题思路:
1,括号类型只有一个就是小括号,那么记录左右括号数量相等且以左括号开始的做大有效值就是了。
2,若以’)‘开头则肯定是无效,因此跳过。
3,就算左右数量相等,如果下一个依然是左括号开头,那么可能还是有效的因此不退出循环
代码:
int longestValidParentheses(char * s){
int count = 0;
int max = 0;
int right, left;
int len = strlen(s);
for(int i = 0; s[i] != ; i++)
{
if(max >= len - i) break;
if(s[i] == )) continue;
right = 0;
left = 0;
count = 0;
for(int j = i; s[j] != ; j++)
{
if(s[j] == ()
right++;
else
left++;
if(right == left){
count = j - i + 1;
if(s[j+1] == ))
break;
}
}
max = count > max ? count : max;
if(count)
i = i + count - 2;
}
return max;
}
