【面试题】最长有效括号

简介: 【面试题】最长有效括号

最长有效括号

仅学习

一、问题描述

二、算法步骤

这个问题可以通过使用栈来解决。栈用于跟踪最近遇到的未匹配的左括号的索引。

  • 初始化一个栈,用于存储索引。
  • 设置一个变量 maxLen 来存储最长有效括号子串的长度。
  • 遍历字符串 s 中的每个字符:

如果字符是 ‘(’,则将其索引压入栈中。

如果字符是 ‘)’:

如果栈不为空且栈顶元素对应的字符是 ‘(’,则弹出栈顶元素,并计算当前索引与栈顶元素索引之间的长度,更新 maxLen。

如果栈为空,则将当前索引压入栈中,表示这是一个未匹配的右括号。

  • 遍历结束后,还需要检查栈中剩余的索引,因为它们可能是以左括号开始的有效括号子串的开始位置。
  • 对于栈中的每个索引 i,计算从索引 i 到字符串末尾的长度,更新 maxLen。

三、python代码

def longestValidParentheses(s):
    stack = [-1]  # 初始化栈,包含一个哨兵元素
    maxLen = 0
    for i, char in enumerate(s):
        if char == '(':
            stack.append(i)  # 压入索引
        else:
            stack.pop()  # 弹出栈顶元素
            if not stack:
                stack.append(i)  # 未匹配的右括号,压入索引
            else:
                # 计算当前有效括号子串的长度,并更新 maxLen
                maxLen = max(maxLen, i - stack[-1])
    return maxLen

四、算法复杂度

  • 算法的时间复杂度是 O(n),其中 n 是字符串的长度,因为每个字符只被遍历一次。
  • 空间复杂度是 O(n),最坏情况下栈可能包含所有字符的索引。
相关文章
|
7月前
|
存储 算法 编译器
米哈游面试算法题:有效的括号
米哈游面试算法题:有效的括号
86 0
|
存储
【栈与队列面试题】有效的括号(动图演示)
【栈与队列面试题】有效的括号(动图演示)
|
7月前
|
算法
面试题 08.09:括号
面试题 08.09:括号
29 0
【牛客面试必刷TOP101】有效括号序列、滑动窗口的最大值
【牛客面试必刷TOP101】有效括号序列、滑动窗口的最大值
|
算法 前端开发
经典面试题:有效的括号
在前端算法面试中,经常会被问到的一道题是 - “有效的括号”或者是称呼为“字符串是否是括号匹配”,什么意思呢?
168 0
【面试高频系列】生成所有「有效括号」,以及如何考虑「成对组合生成」问题 ... |刷题打卡
【面试高频系列】生成所有「有效括号」,以及如何考虑「成对组合生成」问题 ... |刷题打卡
[leetcode/lintcode 题解] 阿里算法面试真题:最长有效括号
[leetcode/lintcode 题解] 阿里算法面试真题:最长有效括号
[leetcode/lintcode 题解] 阿里算法面试真题:最长有效括号
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
下一篇
DataWorks