Golang解LeetCode 1021. 删除最外层的括号
2019-12-09 本文已影响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.pngfunc 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])
}