码迷,mamicode.com
首页 > 编程语言 > 详细

java代码按照指定格式解压缩字符串

时间:2017-04-01 15:25:23      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:mst   i++   imp   code   void   多个   logs   san   eof   

import java.util.Stack;
// deHong hongJu oldJiang dP
public class RedChrysanthemum {
    private static String result = "";
    private static Stack<String> stack = new Stack<>();

    public static void main(String[] args) {
        //"4[b]3[ac]" 解压缩后为"bbbbacacac"
        // "2[d3[c]]" 解压缩后为 "dcccdccc"
        String str = "ef10[d3[cc]]";

       System.out.print(process(str));
    }

    private static String process(String str) {
        String in, out;
        int length = str.length();
        for (int i = 0; i < length; i++) {
            in = String.valueOf(str.charAt(i));
            // 不等于右括号的都进栈
            if (!in.equals("]")) {
                stack.push(in);
            } else {
                String tmpStr = "";
                String tar = "";
                out = stack.pop();
                // 待出栈的都是[字母数字,拿到数字拼上,蹦出一个,然后去下面的循环。
                // 如果连续多个字母,就会继续走这个循环,数字走下面。
                while (!out.equals("[")) {
                    tmpStr = out + tmpStr;
                    // pop出来一个,继续判断,是字母就再pop
                    out = stack.pop();
                }

                // 取数字 2[d3[c]]
                String numStr = "";
                while (stack.peek().charAt(0) >= ‘0‘ && stack.peek().charAt(0) <= ‘9‘) {
                    // 访问栈顶,是数字就拼接上,然后蹦走一个。
                    numStr = stack.peek() + numStr;
                    stack.pop();
                    if (stack.isEmpty()) {
                        break;
                    }
                }
                // 拿到左中括号左侧的数字
                int num = Integer.parseInt(numStr);
                for (int j = 0; j < num; j++) {
                    tar = tar + tmpStr;
                }
                stack.push(tar);
            }
        }

        while (stack.size() > 0) {
            String finalStr = stack.pop();
            result = finalStr + result;
        }
        return result;
    }
}

 

java代码按照指定格式解压缩字符串

标签:mst   i++   imp   code   void   多个   logs   san   eof   

原文地址:http://www.cnblogs.com/JohnSwift/p/6655859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!