当前位置:   article > 正文

leetcode 394. 字符串解码

leetcode 394. 字符串解码

        本题主要思路是使用两个栈:一个用于存储倍数(数字),另一个用于存储解码结果(字符串)。在遍历输入字符串时,根据不同的字符执行相应的操作,最终得到解码后的字符串。

        具体来说,字符有四种不同的情况:

  • 如果c是 '[',表示开始一个新的子串,将当前的倍数multi压入stack_multi栈中,将当前的解码结果ans压入stack_ans栈中,然后重置multi为0,ans为一个空字符串。 
  • 如果c是']',表示当前子串结束,需要将当前的ans按照倍数进行重复。从stack_multi栈中取出一个倍数cur_multi,然后将ans重复cur_multi次,再与stack_ans栈中的上一个解码结果相加,得到新的解码结果。
  • 如果c是数字(在'0'到'9'之间),将当前的数字字符转换为整数并更新multi。
  • 如果c是其他字符,直接将其添加到当前的解码结果res中。

        Java代码如下:

  1. class Solution {
  2. public String decodeString(String s) {
  3. StringBuilder ans = new StringBuilder();
  4. int mutil = 0;
  5. LinkedList<Integer> stack_multi = new LinkedList<>();
  6. LinkedList<String> stack_ans = new LinkedList<>();
  7. for(Character c : s.toCharArray()){
  8. if(c >= '0' && c <= '9'){
  9. mutil = mutil * 10 + (c - '0');
  10. }
  11. else if(c == '['){
  12. stack_multi.addLast(mutil);
  13. stack_ans.addLast(ans.toString());
  14. mutil = 0;
  15. ans = new StringBuilder();
  16. }
  17. else if(c == ']'){
  18. int cur_mutil = stack_multi.removeLast();
  19. StringBuilder temp = new StringBuilder();
  20. for(int i=0; i<cur_mutil; i++) temp = temp.append(ans);
  21. ans = new StringBuilder(stack_ans.removeLast() + temp);
  22. }
  23. else{
  24. ans.append(c);
  25. }
  26. }
  27. return ans.toString();
  28. }
  29. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/63438
推荐阅读
相关标签
  

闽ICP备14008679号