LeetCode 394 字符串解码

1、数据结构:栈。同时对go中字符相关的rune类型进行学习。

rune:rune 类型可以直接通过 int()函数转为整型数字,[]rune类型可以直接通过string()函数转为string类型。

2、看到题目中包含括号的第一瞬间,想到可以使用栈的数据结构,将左括号以及中间的字符串入栈,直至遍历到右括号,将括号间的字符按规定次数进行重复后加入到结果字符串中。

注意:go中遍历,要先判断t>=0,随后才可以进行stack[t]=="xxx"的判断,否则会因为可能产生stack[-1]的情况而编译报错。

func decodeString(s string) string {
    var tmpS []rune=[]rune(s)
    var stack []rune
    for i:=0; i<len(tmpS);{
        if tmpS[i]==']'{
            posSub, j:=len(stack), len(stack)-1
            for stack[j]!='['{ j-- }
            sub:=stack[j+1:posSub]
            t, posRe:=j-1, j
            for t>=0 && stack[t]<='9'&& stack[t]>='0'{ t-- }
            rep:=stack[t+1:posRe]
            stack=stack[:t+1]
            stack=append(stack, getSubString(sub, rep)...)
            i++
        }else{ 
            stack=append(stack, tmpS[i])
            i++ 
        } 
    }
    return string(stack)
}

func getSubString(s ,r []rune) []rune{
    var res []rune
    rep:=0
    for _, v:=range r{ rep=rep*10+int(v-'0') }
    for i:=0; i<rep; i++{ res=append(res, s...) }
    return res
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值