我想如下解压缩串看起来:递归串减压
输入: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代码示例。 –