| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- package main
 
- // 穷举
 
- func longestValidParenthesesOld(s string) int {
 
- 	pair := 0
 
- 	for i := 0; i < len(s); i++ {
 
- 		left, right := 0, 0
 
- 		for j := i; j < len(s); j++ {
 
- 			if s[j] == '(' {
 
- 				left++
 
- 			} else {
 
- 				right++
 
- 			}
 
- 			if right > left {
 
- 				break
 
- 			}
 
- 			if left == right && left > pair {
 
- 				pair = left
 
- 			}
 
- 		}
 
- 	}
 
- 	return pair * 2
 
- }
 
- func longestValidParentheses(s string) int {
 
- 	stack := []int{}
 
- 	// max: longest length, beg: idx of last ')' before current stack
 
- 	max, beg := 0, -1
 
- 	for i := 0; i < len(s); i++ {
 
- 		if s[i] == '(' {
 
- 			stack = append(stack, i)
 
- 		} else if s[i] == ')' {
 
- 			if len(stack) > 0 {
 
- 				// pop last '('
 
- 				stack = stack[:len(stack)-1]
 
- 			} else {
 
- 				beg = i
 
- 				continue
 
- 			}
 
- 			if len(stack) == 0 {
 
- 				// curr idx is the end of curr seq
 
- 				max = maxInt(max, i-beg)
 
- 			} else {
 
- 				// top of stack is the beg of curr seq
 
- 				max = maxInt(max, i-stack[len(stack)-1])
 
- 			}
 
- 		}
 
- 	}
 
- 	return max
 
- }
 
- // func main() {
 
- // 	fmt.Println(longestValidParentheses("("))
 
- // 	fmt.Println(longestValidParentheses("()()("))
 
- // 	fmt.Println(longestValidParentheses("()(((()(()(((()(()())))(()"))
 
- // }
 
 
  |