leetcode 394. 字符串解码

leetcode 394. 字符串解码_第1张图片

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

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

  • 如果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代码如下:

class Solution {
    public String decodeString(String s) {
        StringBuilder ans = new StringBuilder();
        int mutil = 0;
        LinkedList stack_multi = new LinkedList<>();
        LinkedList stack_ans = new LinkedList<>();
        for(Character c : s.toCharArray()){
            if(c >= '0' && c <= '9'){
                mutil = mutil * 10 + (c - '0');
            }
            else if(c == '['){
                stack_multi.addLast(mutil);
                stack_ans.addLast(ans.toString());
                mutil = 0;
                ans = new StringBuilder();
            }
            else if(c == ']'){
                int cur_mutil = stack_multi.removeLast();
                StringBuilder temp = new StringBuilder();
                for(int i=0; i

你可能感兴趣的:(leetcode刷题记录,leetcode,算法,java,栈)