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])
}