【Leetcode】394.字符串解码

 1 class Solution {
 2     public int ptr = 0;
 3     public String decodeString(String s) {
 4         LinkedList<String> stk = new LinkedList<>();
 5         while(ptr < s.length()){
 6             char cur = s.charAt(ptr);
 7             System.out.println(ptr+" "+cur);
 8             if(Character.isDigit(cur)){
 9                 stk.addLast(getDigit(s));//【可能是多位的,一个完整的数,不一定是单个数字】
10             }
11             else if(Character.isLetter(cur) || cur == '['){
12                 stk.addLast(String.valueOf(s.charAt(ptr)));
13                 ptr++;
14             }
15             else{
16                 ++ptr;
17                 LinkedList<String> sub = new LinkedList<>();
18                 while(!"[".equals(stk.peekLast())){
19                     sub.addLast(stk.removeLast());
20                 }
21                 stk.removeLast();
22                 Collections.reverse(sub);
23                 int repeatNum = Integer.valueOf(stk.removeLast());
24                 String curStr = getString(sub);
25                 StringBuilder sb = new StringBuilder();
26                 while(repeatNum > 0){
27                     sb.append(curStr);
28                     repeatNum--;
29                 }
30                 stk.addLast(sb.toString());
31             }
32         }
33         return getString(stk);
34     }
35     public String getString(LinkedList<String> sub){
36         StringBuilder sb = new StringBuilder();
37         for(String s: sub){
38             sb.append(s);
39         }
40         return sb.toString();
41     }
42     public String getDigit(String s){
43         StringBuilder sb = new StringBuilder();
44         while(Character.isDigit(s.charAt(ptr))){
45             sb.append(s.charAt(ptr));
46             ptr++;
47         }
48         return sb.toString();
49     }
50 }

 

posted @ 2020-05-28 20:37  xd会飞的猫  阅读(291)  评论(0编辑  收藏  举报