美文网首页
Golang解LeetCode 1021. 删除最外层的括号

Golang解LeetCode 1021. 删除最外层的括号

作者: 肥肥的大肥鹅 | 来源:发表于2019-12-09 17:52 被阅读0次

    Golang解LeetCode 1021. 删除最外层的括号

    题目描述

    有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。

    如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。

    给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。

    对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-outermost-parentheses
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解法

    image-20191209173058217.png image-20191209173721102.png
    func removeOuterParentheses(S string) string {
        //把字符串转换成rune数组
        rune_arr := []rune(S)
        //start纪律原语起点,sum用于判断原语
        var start,sum int
        length := len(S)
        for i,r := range rune_arr{
            //记录起点
            if sum==0{
                start=i
            }
            //string(r)=="(",sum+1
            //string(r)==")",sum-1
            if r==40{
                sum+=1
            }else{
                sum-=1
            }
            //sum==0,将原语起点和终点赋值为0,删除一对括号长度-2
            if sum==0{
                rune_arr[start]=0
                rune_arr[i]=0
                length-=2
            }
        }
        //把非0数据向前移
        for index,i:=0,0;i<len(S);i++{
            if rune_arr[i]!=0{
                rune_arr[index] = rune_arr[i]
                index++
            }
        }
        //返回切片,非0数据部分
        return string(rune_arr[:length])
    }
    

    相关文章

      网友评论

          本文标题:Golang解LeetCode 1021. 删除最外层的括号

          本文链接:https://www.haomeiwen.com/subject/uuligctx.html