0
点赞
收藏
分享

微信扫一扫

力扣394. 字符串解码

流沙雨帘 2022-04-03 阅读 76
java
class Solution {
    int index;
    public String decodeString(String s) {
        index=0;
     //   StringBuilder res=new StringBuilder();
        LinkedList<String> stk = new LinkedList<String>();
        while(index<s.length()){
            char cur=s.charAt(index);
            if(Character.isDigit(cur)){// 获取一个数字并进栈
                String digits=getDigits(s);
                stk.addLast(digits);
            }else if(Character.isLetter(cur) || cur=='['){ // 获取一个字母并进栈
                stk.addLast(String.valueOf(s.charAt(index++)));
            }else{//出栈
                ++index;
                LinkedList<String> sub = new LinkedList<String>();
                while(!"[".equals(stk.peekLast())){
                    sub.addLast(stk.removeLast());
                }
                stk.removeLast();// 左括号出栈
                Collections.reverse(sub);//由于栈先进后出,使得顺序颠倒,因此反转一下
                int repTime=Integer.valueOf(stk.removeLast()); // 此时栈顶为当前 sub 对应的字符串应该出现的次数
                StringBuilder t=new StringBuilder();
                String o=getString(sub);
                while(repTime-->0){// 构造字符串
                    t.append(o);
                }
                 stk.addLast(t.toString());// 将构造好的字符串入栈
            }
        }
        return getString(stk);
    }
    public String getString(LinkedList<String> sub){//将链表转为字符串
        StringBuilder sb=new StringBuilder();
        for(String s:sub){
            sb.append(s);
        }
        return sb.toString();
    }
    public String getDigits(String s){//获得数字,数字可能好几位
        StringBuilder digits=new StringBuilder();
        while(Character.isDigit(s.charAt(index))){
            digits.append(s.charAt(index++));
        }
        return digits.toString();
    }
}

 

力扣题目:394. 字符串解码

举报

相关推荐

0 条评论