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;
}
经验分享 程序员 微信小程序 职场和发展