最长有效括号

今天,打开lectcode,无意间看到了这道题目,读了一遍,不出所料,不会写,最后看了看博客,终于搞懂了,必须记录一下心得。

一.题目描述

这道题目很简洁,就是要求我们获取最长有效的子字符串的长度。

二.讲解算法原理

本题的解决方法有些特殊,我们可以很自然的想到要用到栈结构,但入栈的不是字符串中的字符,而是字符串中字符的下标。

本题是通过维护一个记录各个括号位置的堆栈来实现的。即stack<int>,另外,通过一个变量start来记录有效括号的起始位置。

如果是左括号,那就入栈,有括号是不入栈的,这是我们解决括号问题的一贯思路,即栈中储存的是左括号的下标,没有有括号的下标,

如果是右括号,那就得分情况讨论了:

情况一:如果此时堆栈不为空,那么说明得到了一对括号。此时,将堆栈中的括号出栈,出栈之后,如果堆栈空了,那么可以得到最长有效括号的长度为max(max_len,i-start),如果不为空,那么当前的的最大长度为max(max_len,i-temp.top()),

情况二:如果此时堆栈为空:那么当前遇到的右括号必然是非法的,重置起始位置。

三.代码实现

class Solution {
public:
    int longestValidParentheses(string s) {
        int max_len = 0;
        int start = -1;
        if (s.empty()) return 0;
        stack<int> temp;
        for (int i = 0; i < s.size(); ++i)
        {
            if ('(' == s[i])
            {
                temp.push(i);
            }
            else       // (( ))
            {
                if (!temp.empty())
                {
                    int n = temp.top();
                    temp.pop();
                    if (temp.empty()) 
                        max_len = max(max_len, i - start);
                    else  
                        max_len = max(max_len, i - n);
                }
                else
                {
                    start = i;
                }
            }
        }
        return max_len;

    }
};

相关推荐

  1. leetcode有效括号

    2024-06-07 01:02:07       36 阅读
  2. 【算法题】32. 有效括号

    2024-06-07 01:02:07       52 阅读
  3. LeetCode 32:有效括号

    2024-06-07 01:02:07       54 阅读
  4. LeetCode 32. 有效括号

    2024-06-07 01:02:07       46 阅读
  5. 每日leetcode--有效括号

    2024-06-07 01:02:07       42 阅读
  6. LeetCode_32_困难_有效括号

    2024-06-07 01:02:07       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 01:02:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 01:02:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 01:02:07       82 阅读
  4. Python语言-面向对象

    2024-06-07 01:02:07       91 阅读

热门阅读

  1. 堆排序pta

    2024-06-07 01:02:07       23 阅读
  2. 如何增加服务器的高并发

    2024-06-07 01:02:07       31 阅读
  3. 大数据的数据变换与价值提炼

    2024-06-07 01:02:07       27 阅读
  4. Apache Calcite - 自定义数据源适配之访问内存列表

    2024-06-07 01:02:07       26 阅读
  5. 处理STM32 DMA方式下的HAL_UART_ERROR_ORE错误

    2024-06-07 01:02:07       31 阅读
  6. 是否引用传递一定优于值传递

    2024-06-07 01:02:07       29 阅读
  7. golang接口/枚举/结构使用示例

    2024-06-07 01:02:07       28 阅读
  8. GBDT的优势:为什么选择梯度提升决策树

    2024-06-07 01:02:07       36 阅读
  9. 后端开发面经系列 -- 中望C++一面面经

    2024-06-07 01:02:07       24 阅读