6.字符串解析(LeetCode第394题)

分享一个容易理解的解法,个人觉得官方的不太好理解

代码实现

class Solution {
    public String decodeString(String s) {
         
         Stack<Integer> numStack = new Stack<>();
         Stack<String> strStack = new Stack<>();
         String str = "";
         int numTemp = 0;
         
         //分为四种情况考虑,分别是数字、字符,左括号以及右括号
         for(char c : s.toCharArray())
         {
             if (Character.isDigit(c))
             {
                 //这一步是为了处理左括号前面出现多位数
                 numTemp = numTemp * 10 + Integer.parseInt(c + "");
             }
             else if (c == '[')
             {
                 numStack.push(numTemp);
                 strStack.push(str);
                 //此处一定要注意记得把numTemp和str置空
                 numTemp = 0;
                 str = "";
             }
             else if (c == ']')
             {
                 //如果使用23[a2[c]]举例子,那么第一次pop出的number是2,第一次pop出的str1是a,str此时是c,这里一定要注意
                 int number = numStack.pop();
                 String str1 = strStack.pop();
                 while(number > 0)
                 {
                     str1 += str;
                     number--;
                 }
                 str = str1;
             }
             //其余的情况都是字符
             else
             {
                 str += c;
             }
         }
         return str;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值