• 使用栈的特性,遇到 】 符号从栈里面取出 ```java package com.example.suanfa.alg1;

    import java.util.LinkedList;

    /**

    • @author lfy
    • @date 2022-05-25 */ public class DecodeString {

      public String decodeString(String s) {

      1. StringBuilder res = new StringBuilder();
      2. int multi = 0;
      3. LinkedList<Integer> stack_multi = new LinkedList<>();
      4. LinkedList<String> stack_res = new LinkedList<>();
      5. for(Character c : s.toCharArray()) {
      6. if(c == '[') {
      7. stack_multi.addLast(multi);
      8. stack_res.addLast(res.toString());
      9. multi = 0;
      10. res = new StringBuilder();
      11. }
      12. else if(c == ']') {
      13. StringBuilder tmp = new StringBuilder();
      14. int cur_multi = stack_multi.removeLast();
      15. for(int i = 0; i < cur_multi; i++){
      16. tmp.append(res);
      17. }
      18. res = new StringBuilder(stack_res.removeLast() + tmp);
      19. }
      20. else if(c >= '0' && c <= '9') multi = multi * 10 + Integer.parseInt(c + "");
      21. else res.append(c);
      22. }
      23. return res.toString();

      }

      public static void main(String[] args) {

       String s = "3[a]2[bc]";
       String s1 = "3[a2[c]]";
       DecodeString test = new DecodeString();
       System.out.println(test.decodeString(s1));
      

      } } ```

    • 递归法调用 ```java class Solution { public String decodeString(String s) {
        return dfs(s, 0)[0];
      
      } private String[] dfs(String s, int i) {
        StringBuilder res = new StringBuilder();
        int multi = 0;
        while(i < s.length()) {
            if(s.charAt(i) >= '0' && s.charAt(i) <= '9') 
                multi = multi * 10 + Integer.parseInt(String.valueOf(s.charAt(i))); 
            else if(s.charAt(i) == '[') {
                String[] tmp = dfs(s, i + 1);
                i = Integer.parseInt(tmp[0]);
                while(multi > 0) {
                    res.append(tmp[1]);
                    multi--;
                }
            }
            else if(s.charAt(i) == ']') 
                return new String[] { String.valueOf(i), res.toString() };
            else 
                res.append(String.valueOf(s.charAt(i)));
            i++;
        }
        return new String[] { res.toString() };
      
      }
    public static void main(String[] args) {
        String s = "3[a]2[bc]";
        String s1 = "3[a2[c]]";
        DecodeString test = new DecodeString();
        System.out.println(test.decodeString(s1));
    }
    

    }

    ```