LeetCode---32.最长有效括号

题目来源:https://leetcode-cn.com/problems/longest-valid-parentheses/description/

题目描述:

LeetCode---32.最长有效括号_第1张图片

算法描述:

1.定义一个maxLength记录最长有效括号长度,beginIndex记录有效括号的起始位置。

2.从字符串的第一个位置开始遍历,遇到左括号的话就入栈,遇到右括号的话就将栈顶元素弹出,并且判断当前序列的有效括号长度。 栈里保存的是左括号的位置。

3.当遇到右括号时,分别有如下几种情况:

 (1).当栈为空时,说明该右括号一定无法匹配,这时让beginIndex加1,表明有效括号应该从该右括号的下一个位置开始找

 (2).当前栈内有元素,则将栈顶元素出栈。如果弹出后的栈为空,则表明当前括号匹配,这时计算出当前的当前有效括号长度,即当前位置的值i减去beginIndex的值。再让这个值和maxLength比较,若这个值大,则让maxLength等于这个值。

 (3).当前栈内有元素并且栈顶出栈后仍然有元素,则当前有效括号长度为当前元素位置减去栈顶元素的位置。

代码如下:

int longestValidParentheses(char* s) {
	//计算字符串长度 
    int len=strlen(s);
    //定义一个栈 
    int stack[len+1];
    //可以看成是栈顶指针 
    int top=-1;
    //最长有效括号长度 
    int maxLength=0;
    //有效括号的起始位置
    int beginIndex=0;
    for(int i=0;i(i-beginIndex+1)?maxLength:(i-beginIndex+1);
                }else{
                	//如果栈顶出栈后栈不为空,则当前有效括号长度为当前元素位置减去栈顶元素的位置 
                    maxLength=maxLength>(i-stack[top])?maxLength:(i-stack[top]);
                }
            }
        }
    }
    return maxLength;
}

 

你可能感兴趣的:(LeetCode)