Golang解LeetCode 1021. 刪除最外層的括號

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
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

解法

image-20191209173058217.png
image-20191209173721102.png
func removeOuterParentheses(S string) string {
    //把字符串轉(zhuǎn)換成rune數(shù)組
    rune_arr := []rune(S)
    //start紀(jì)律原語起點,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數(shù)據(jù)向前移
    for index,i:=0,0;i<len(S);i++{
        if rune_arr[i]!=0{
            rune_arr[index] = rune_arr[i]
            index++
        }
    }
    //返回切片,非0數(shù)據(jù)部分
    return string(rune_arr[:length])
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容