繁体   English   中英

Java - 如何递归解码字符串

[英]Java - How to decode a string recursively

我需要解码一个递归编码为计数的字符串,后跟子字符串

给定一个编码字符串(s),任务是对其进行解码。 字符串编码的模式如下。

例子:

输入:str[] = "1[b]" 输出:b

输入:str[] = "2[ab] 输出:abab

输入:str[] = "2[a2[b]]" 输出:abbabb

输入:str[] = "3[b2[ca]]" 输出:bcacabcacabcaca

下面是我试图实现相同的代码。 我所知道的是它可以使用两个堆栈来解决。

public class Main {
    public static void main(String[] args) {
        Stack<Interger> s1 = new Stack();
        Stack<String> s2 = new Stack();
        String result = "";
        for(int i = 0; i < args.length; i++){
            if(Interger.parseInt(args[i]) == 0){
                s1.push(args[i]);
            }
            if(args[i] == 0){
                if(args[i] == ']'){
                   result = s2.pop();
                }
                if(args[i] == '['){
                    continue;
                }
                s2.push(args[i])
            }
        }
    }
}

谁能帮助我编写代码以获得预期输出的有效方法是什么?

如何递归解码字符串

您需要定义基本案例递归案例

  • 基本情况- 给定的字符串不包含方括号[] ,因此无需处理它。 返回值是给定的字符串本身。

  • 递归案例- 我们需要确定开始[和结束括号]的索引,并基于该合同一个新的字符串。

这就是它的实现方式:

public static String decode(String str) {
    int startOfBrackets = str.indexOf('[');
    
    if (startOfBrackets == -1) { // base case there's no square brackets in the string
        return str;
    }

    int startOfDigits = getFirstDigitsPosition(str);
    int repeatNum = Integer.parseInt(str.substring(startOfDigits, startOfBrackets));
    
    return str.substring(0, startOfDigits) +
        decode(str.substring(startOfBrackets + 1, str.length() - 1)).repeat(repeatNum);
}

public static final Pattern SINGLE_DIGIT = Pattern.compile("\\d");

public static int getFirstDigitsPosition(String str) {
    Matcher matcher = SINGLE_DIGIT.matcher(str);
    if (matcher.find()) {
        return matcher.start();
    }
    return -1;
}

main()

public static void main(String[] args) {
    System.out.println(decode("1[b]"));
    System.out.println(decode("2[ab]"));
    System.out.println(decode("2[a2[b]]"));
    System.out.println(decode("3[b2[ca]]"));
}

输出:

abab
abbabb
bcacabcacabcaca

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM