最长有效括号算法的实现(JavaScript)
最长有效括号是一道经典的算法问题,要求在给定的字符串中找到最长的有效括号子串,并返回其长度。有效括号子串是指由 ‘(’ 和 ‘)’ 组成的子串,满足以下条件:
- 左右括号数量相等。
- 括号的顺序是有效的,即每个左括号都有与之对应的右括号。
下面我将详细介绍如何使用JavaScript实现这个算法。
算法思路:
我们可以使用栈来解决这个问题。具体步骤如下:
-
创建一个栈,用于存储字符的索引。
-
初始化变量
maxLen
为0,用于记录最长有效括号子串的长度。 -
初始化变量
lastInvalidIndex
为-1,用于记录最后一个无效右括号的索引。 -
遍历给定的字符串,对于每个字符:
- 如果是左括号’(',将其索引入栈。
- 如果是右括号’)',则有两种情况:
- 如果栈为空,表示当前右括号是无效的,更新
lastInvalidIndex
为当前索引。 - 如果栈不为空,弹出栈顶元素,表示匹配了一个左括号。此时有两种情况:
- 如果栈为空,说明当前右括号匹配完了所有左括号,计算当前有效括号子串的长度,更新
maxLen
。 - 如果栈不为空,计算当前有效括号子串的长度(当前索引减去栈顶元素的索引),更
- 如果栈为空,说明当前右括号匹配完了所有左括号,计算当前有效括号子串的长度,更新
- 如果栈为空,表示当前右括号是无效的,更新