1021. 删除最外层的括号

image.png
image.png
image.png

1 出栈的唯一情况是当前元素是右括号 栈顶是左括号
2 其他情况一概入栈处理
3 当出栈后栈是空是 表明分割结束了
4 按照题意,需要去掉最外层的括号

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func removeOuterParentheses(S string) string {
  7. if len(S)==0{
  8. return ""
  9. }
  10. stack := []byte{S[0]}
  11. start :=1
  12. var res strings.Builder
  13. for i:=1;i<len(S);i++{
  14. if len(stack)>0&&S[i]==')'&&stack[len(stack)-1]=='(' {
  15. stack = stack[:len(stack)-1]
  16. if len(stack)==0{
  17. res.WriteString(S[start:i])
  18. start = i+2
  19. }
  20. }else {
  21. stack = append(stack,S[i])
  22. }
  23. }
  24. return res.String()
  25. }
  26. func main() {
  27. fmt.Println(removeOuterParentheses("(()())(())"))
  28. fmt.Println(removeOuterParentheses("(()())(())(()(()))"))
  29. fmt.Println(removeOuterParentheses("()()"))
  30. }

image.png