ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

394. 字符串解码

2021-12-01 21:34:25  阅读:156  来源: 互联网

标签:String int 解码 stack 394 字符串 chars s1


394. 字符串解码

package 字符串;

import java.util.Stack;

public class 字符串解码 {
    public static void main(String[] args) {
        String s = "3[a2[c]]";
        字符串解码 o = new 字符串解码();
        String s1 = o.decodeString(s);
        System.out.println(s1);
    }


    // 利用栈找中括号的另一半,遇到中括号左边就去找另一半
    // 将中括号里面的字符复写
    // 反复递归,直到字符串中不含有左半边中括号为止
    public String decodeString(String s) {
        if (!s.contains("[")) {
            return s;
        }
        char[] chars = s.toCharArray();
        int i = 0;
        while (chars[i] != '[' && i < chars.length) {
            i++;
        }
        int end = getNextIndex(chars, i);
        String s1 = deCodeIndex(s, i, end);
        return decodeString(s1);
    }

    public int getNextIndex(char[] chars, int i) {
        Stack<Character> stack = new Stack<>();
        stack.push(chars[i]);
        int j = i + 1;
        while (!stack.isEmpty()) {
            if (chars[j] == '[') {
                stack.push('[');
            }
            if (chars[j] == ']') {
                stack.pop();
            }
            j++;
        }
        return --j;
    }

    public String deCodeIndex(String s, int start, int end) {
        String s1 = "";
        String s3 = s.substring(end + 1, s.length());
        String s2 = "";
        String k="";
        int numStart=-1;
        for (int i = 0; i < start; i++) {
            if(s.charAt(i)>='0' && s.charAt(i)<='9'){
                k+=String.valueOf(s.charAt(i));
                if(numStart==-1){
                    numStart=i;
                }
            }
        }
        if(numStart>0){
            s1 = s.substring(0, numStart);
        }

        int count=Integer.parseInt(k);
        for (int i = 0; i < count; i++) {
            s2 += s.substring(start + 1, end);
        }
        return s1 + s2 + s3;
    }
    
}

..

标签:String,int,解码,stack,394,字符串,chars,s1
来源: https://www.cnblogs.com/guoyu1/p/15630768.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有