LeetCode【394】字符串解码

本文介绍了一种使用Java编写的字符串解码方法,利用栈数据结构处理[]内嵌套的字母重复和倍数,最终返回解码后的字符串。
摘要由CSDN通过智能技术生成

题目:
在这里插入图片描述

思路:
参考:https://blog.csdn.net/xushiyu1996818/article/details/107973300

代码:

 public String decodeString(String s){
  Deque<Character> stack = new ArrayDeque<>();
  for(char c :s.toCharArray()){
    if(c != ']'){
      stack.push(c);   //把除了']'的所有都押入到栈中
    }else{
      StringBuilder sb = new StringBuilder();
      while(!stack.isEmpty()&& Character.isLetter(stack.peek())){
        sb.insert(0,stack.pop());
      }
      String sub = sb.toString(); // 获得 [] 内的字符串
      stack.pop(); // 去除 [ 括号      // 注意,这里容易出错,要记得pop
      
      // step2 :获取倍数数字
      sb = new StringBuilder();
 			while(!stack.isEmpty() && Character.isDigit(stack.peek())){
        sb.insert(0,stack.pop());
      }     
      int count = Integer.valueOf(sb.toString()); // 倍数
      
      while(count > 0){                          // 注意这里直接塞回去就好,不用拼成完成的ababab再塞回去
        for(char ch:sub.toCharArray()){
          stack.push(ch);
        }
      	count--;
      }
    }
  }
  // 把栈里面所有的字母取出来
  StringBuilder retv = new StringBuilder();      // 注意返回结果,将所有括号处理完,就可以从栈里返回了
  while(!stack.isEmpty()){
    retv.insert(0,stack.pop());
  }
  return retv.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值