题目
解题思路
首先先说一个思路,从左到右看字符串,起始值是 1,遇到左括号就加 1,遇到右括号就减 1。比如:
(()())(())(()(()))
121210121012123210
复制代码
就会得到一个以数字标识的括号字符串。在这个过程中,如果遇到左括号大于 1 就取出,如果遇到右括号大于 0 就取出。取出的字符串就是目标串。
// golang环境中的代码执行思路
package main
import (
"fmt"
)
func main() {
s := "(()())(())(()(()))"
sum := 0
result := ""
len := len(s)
for i := 0; i < len; i++ {
if string(s[i]) == "(" {
sum += 1
if sum > 1 {
result += "("
}
} else {
sum -= 1
if sum > 0 {
result += ")"
}
}
}
fmt.Println(result )
}
复制代码
// leetcode环境解题源码
func removeOuterParentheses(S string) string {
sum := 0
result := ""
len := len(S)
for i := 0; i < len; i++ {
if string(S[i]) == "(" {
sum += 1
if sum > 1 {
result += "("
}
} else {
sum -= 1
if sum > 0 {
result += ")"
}
}
}
return result
}
复制代码
其实这道题的标签是“栈”类题。下一版可以尝试用栈的思路去解决这道算法。另外如果需要 Java 实现版本的小伙伴也可以评论区留言,我会补上 Java 版本的解题源码。
评论