簡體   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