题目
解题思路
首先先说一个思路,从左到右看字符串,起始值是 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 版本的解题源码。
评论