394. 字符串解码

2021-09-24  本文已影响0人  justonemoretry
image.png

解法

class Solution {
    int i = 0;
    public String decodeString(String s) {
        LinkedList<String> res = new LinkedList<>();
        while (i < s.length()) {
            char c = s.charAt(i);
            if (Character.isDigit(c)) {
                String digits = getDigits(s);
                res.addLast(digits);
            } else if (c == '[' || Character.isLetter(c)) {
                res.addLast(String.valueOf(c));
                i++;
            } else {
                // 不是上面的情况,就是遇到了右括号]
                i++;
                LinkedList<String> sub = new LinkedList<>();
                while (!"[".equals(res.peekLast())) {
                    sub.addLast(res.removeLast());
                }
                Collections.reverse(sub);
                String o = getString(sub);
                res.removeLast();
                // 对应的前缀数字
                int num = Integer.parseInt(res.removeLast());
                StringBuilder seg = new StringBuilder();
                for (int i = 0; i < num; i++) {
                    seg.append(o);
                }
                res.addLast(seg.toString());
            }
        }
        return getString(res); 
    }

    public String getDigits(String s) {
        StringBuilder sb = new StringBuilder();
        while (Character.isDigit(s.charAt(i))) {
            sb.append(s.charAt(i++));
        }
        return sb.toString();
    }

    public String getString(LinkedList<String> stringList) {
        StringBuilder sb = new StringBuilder();
        for (String s : stringList) {
            sb.append(s);
        }
        return sb.toString();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读