LeetCode394(Decode String).

本文介绍了一种用于解码带有数字和方括号的字符串的算法。通过递归地解析字符串中的数字与方括号组合,该算法能正确生成重复字符串序列。例如,输入“3[a2[c]]”将返回“accaccacc”。文章提供了详细的Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目描述, examples:
s = “3[a]2[bc]”, return “aaabcbc”.
s = “3[a2[c]]”, return “accaccacc”.
s = “2[abc]3[cd]ef”, return “abcabccdcdcdef”.
解析 s.

2.代码与描述(Java):

class Solution {
    public String decodeString(String s) {
        //用来获取需要倍乘的次数
        Deque<Integer> times = new ArrayDeque<>();

        //用来构造结果
        Deque<StringBuilder> sbDeque = new ArrayDeque<>();

        //首先添加空String, 防止在没有'[', ']'时候 pop 字符时会有 NoElement的异常。
        sbDeque.push(new StringBuilder(""));

        //获取临时的 multiplier
        int len = s.length();
        int multiplier = 0;
        for(int i = 0; i < len; i++){
            char tempChar = s.charAt(i);
            if(Character.isDigit(tempChar)){
                multiplier = multiplier*10 + Character.getNumericValue(tempChar);
            }else if(tempChar == '['){
                times.push(multiplier);
                multiplier = 0;
                sbDeque.push(new StringBuilder(""));
            }else if(tempChar == ']'){
                StringBuilder ss = new StringBuilder("");
                String tempString = sbDeque.pop().toString();
                int multip = times.pop();
                //这里面不能写 for(int j = 0; j < times.pop(); j++)否则会一直 times.pop()
                for(int j = 0; j < multip; j++){
                    ss.append(tempString);
                }
                sbDeque.push(sbDeque.pop().append(ss));
            }else{
                sbDeque.push(sbDeque.pop().append(tempChar));
            }
        }
        return sbDeque.pop().toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值