394. 字符串解码

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;
    }
    
}
复制代码

..

posted @   guoyu1  阅读(88)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示