我想如下解壓縮串看起來:遞歸串減壓
輸入:4(AB)
輸出:ABABABAB
輸入:11AB
輸出:aaaaaaaaaaab
輸入:2(3b3(ab))
輸出:bbbabababbb bababab
上述例子都出來正確使用遞歸方法以下,但出現的問題,當我輸入是這樣的:
輸入:4(AB)一個
預期輸出:ababababa
輸入:2(3B3(AB))一
預期輸出:bbbabababbbbabababa
我知道出現在哪裏第問題e返回語句「返回重複」。在當前狀態下的遞歸繼續,直到它甚至一個結束括號後碰到輸入字符串的結尾。基本上我不知道如何得到它打破,如果到達結束括號,然後繼續,如果有什麼事。在2(3B3(AB))一個它應該返回2 *(3B3(AB))+一個,現在它返回2 *(3B3(AB))一個。任何幫助非常感謝,因爲我無法得到我的頭。我注意到
public static String decompress(String compressedText) throws Exception
{
//BASE CASE
if(compressedText.length() == 1)
{
if(compressedText.charAt(0) == ')')
{
System.out.println("1: " + compressedText);
return "";
}
else
{
System.out.println("2: " + compressedText);
return compressedText;
}
}
//END BASECASE
if(compressedText.charAt(0) == '(')
{
System.out.println("3: " + compressedText);
return decompress(compressedText.substring(1));
}
//IF DOUBLE DIGIT
if(Character.isDigit(compressedText.charAt(0)) == true && Character.isDigit(compressedText.charAt(1)) == true)
{
if(compressedText.charAt(3) != '(')
{
System.out.println("4: " + compressedText);
int i = Integer.parseInt(compressedText.substring(0,2));
String repeated = new String(new char[i]).replace("\0", compressedText.substring(2,3));
return repeated + decompress(compressedText.substring(3));
}
else
{
System.out.println("5: " + compressedText);
int i = Integer.parseInt(compressedText.substring(0,2));
String repeated = new String(new char[i]).replace("\0", decompress(compressedText.substring(2)));
return repeated;
}
}
//END DOUBLE DIGIT
//IF SINGLE DIGIT
if (Character.isDigit(compressedText.charAt(0)) == true)
{
if(compressedText.charAt(1) !='(')
{
System.out.println("6: " + compressedText);
int i = Integer.parseInt(compressedText.substring(0,1));
String repeated = new String(new char[i]).replace("\0", compressedText.substring(1,2));
return repeated + decompress(compressedText.substring(2));
}
else
{
System.out.println("7: " + compressedText);
int i = Integer.parseInt(compressedText.substring(0,1));
String repeated = new String(new char[i]).replace("\0", decompress(compressedText.substring(1)));
return repeated;
}
}
//END SINGLE DIGIT
//IF RIGHT PARENTHESIS
if (compressedText.charAt(0) == ')')
{
if (compressedText.charAt(1) != ')')
{
System.out.println("8: " + compressedText);
return "";
}
else
{
System.out.println("9: " + compressedText);
return decompress(compressedText.substring(1));
}
}
//END
System.out.println("10: " + compressedText);
return compressedText.charAt(0)+decompress(compressedText.substring(1));
}
'2(3b3(ab))a'的預期輸出是'bbbabababbbbabababa' –
有趣的問題。你可以使用遞歸下降解析器和一個小的BNF語法。然後你可以在10分鐘內將代碼敲出來。 –
好的,添加了JavaScript代碼示例。 –