zoukankan      html  css  js  c++  java
  • [LeetCode] 394. 字符串解码!!!!

    方法一:官方答案

    class Solution {
        int ptr;
    
        public String decodeString(String s) {
            LinkedList<String> stk = new LinkedList<String>();
            ptr = 0;
    
            while (ptr < s.length()) {
                char cur = s.charAt(ptr);
                if (Character.isDigit(cur)) {
                    // 获取一个数字并进栈
                    String digits = getDigits(s);
                    stk.addLast(digits);
                } else if (Character.isLetter(cur) || cur == '[') {
                    // 获取一个字母并进栈
                    stk.addLast(String.valueOf(s.charAt(ptr++))); 
                } else {
                    ++ptr;
                    LinkedList<String> sub = new LinkedList<String>();
                    while (!"[".equals(stk.peekLast())) {
                        sub.addLast(stk.removeLast());
                    }
                    Collections.reverse(sub);
                    // 左括号出栈
                    stk.removeLast();
                    // 此时栈顶为当前 sub 对应的字符串应该出现的次数
                    int repTime = Integer.parseInt(stk.removeLast());
                    StringBuffer t = new StringBuffer();
                    String o = getString(sub);
                    // 构造字符串
                    while (repTime-- > 0) {
                        t.append(o);
                    }
                    // 将构造好的字符串入栈
                    stk.addLast(t.toString());
                }
            }
    
            return getString(stk);
        }
    
        public String getDigits(String s) {
            StringBuffer ret = new StringBuffer();
            while (Character.isDigit(s.charAt(ptr))) {
                ret.append(s.charAt(ptr++));
            }
            return ret.toString();
        }
    
        public String getString(LinkedList<String> v) {
            StringBuffer ret = new StringBuffer();
            for (String s : v) {
                ret.append(s);
            }
            return ret.toString();
        }
    }

  • 相关阅读:
    python基础
    python中自定义的栈
    python内置函数
    python函数之可迭代对象、迭代器的判断
    关系型数据库
    数据库基础知识
    进程间通信--管道
    共享内存应用范例
    Win7秘籍 如何用压缩卷调整不合理分区
    KL-divergence
  • 原文地址:https://www.cnblogs.com/doyi111/p/12984385.html
Copyright © 2011-2022 走看看