func longestValidParentheses(s string) int {
stack := []int{}//存左括号的下标位置
var n = len(s)
flags := make([]int, n)
var length = 0
var maxLength = 0
for i:=0;i<n;i++{
// s[i]是左括号
if s[i]=='('{
stack = append(stack, i)
}else{
// s[i]是右括号
if len(stack)==0{
// 多余的右括号,标记
flags[i] = 1
}else{
// 右括号匹配
stack = stack[:len(stack)-1]
}
}
}
// 未匹配的左括号是多余的,标记
for len(stack)>0{
flags[stack[len(stack)-1]] = 1
stack = stack[:len(stack)-1]
}
// 寻找标记之间的最大长度
for i:=0;i<n;i++{
if flags[i]==0{
length++
maxLength = max(maxLength, length)//每次更新最大长度
}else{
length = 0
}
}
return maxLength
}
func max(a, b int)int{
if a>b{
return a
}
return b
}
相关文章
- 04-08最长的有效括号
- 04-08c# – SmartDevice CAB“不是有效的Windows CE安装文件”
- 04-08有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
- 04-08leetcode3 无重复字符的最长子串
- 04-08QA:无重复字符的最长子串
- 04-08力扣第三题——无重复字符的最长子串
- 04-08python – 使用PyCuda的遗传细胞自动机,如何有效地将每个细胞的大量数据传递给CUDA内核?
- 04-08Leetcode 3:无重复字符的最长子串
- 04-08LeetCode-03 :无重复字符的最长子串长度
- 04-08Leetcode611. 有效三角形的个数 Valid Triangle Number(Medium)