LeetCode(32)Longest Valid Parentheses

题目如下:

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.
For "(()", the longest valid parentheses substring is "()", which has length = 2.
Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

思考分析:

先看几个例子

例1    (((),

    最长匹配括号为 (((), 长度2

例2    ()((),
    最长匹配括号为()(() 或者()((),长度2

例3    ()(()()),8

    最长匹配括号为 ()(()()), 长度8

      首先,想到用栈并不太难。最难的是想到往栈里面存储什么,借助上一题的思路,最直白的想法是存储左括号'(',但是这样做的话,没法解决上面的问题。在网上搜了搜,看到了比较巧妙的办法。即在栈里存储左括号'('的下标index。这样才能正确地计算可能的最长距离。

      其次,把问题简化一下,先不找最长的括号串,先找候选括号串。什么是候选括号串呢?需要满足的第一个条件是'('和')'的数量相等(所以,上面提到了使用了栈来进行左右括号是否匹配的检查),需要满足的第二个条件是,匹配的过程中不能出现')('的情况。也就是说,某个时刻,发现有单独的'('出现了,就说明此时此刻的候选串结束了,将开始对新的候选串的检查了。

正确代码:

class Solution {
public:
    int longestValidParentheses(string s) {
     stack paranStack;
        int maxLength=0;
        int lastValidIndx=0;
        for (int indx=0; indx

你可能感兴趣的:(C++,LeetCode(C++))