Die Zuweisung besteht darin, eine Zeichenfolge zu dekomprimieren. Insbesondere muss der Code für 3 Samples funktionieren, wie im Bild dargestellt. Dekomprimieren Sie eine Zeichenfolge mit verschachtelten Strings
Mein Code hier funktioniert in den ersten 2 der Proben. Ich bin jedoch nicht in der Lage, die 3. Probe zu erstellen. Wahrscheinlich habe ich das Konzept der Rekursion wahrscheinlich nicht verstanden. Kannst du mir helfen?
import java.util.Scanner;
public class Compression4 {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
String input=in.next();
System.out.println(uncompress(input));
}
public static boolean flag = true;
public static String uncompress(String compressedText)
{
return uncompress(compressedText, "", "");
}
public static String getMultiple(String x, int N) {
if (N == 0) return "";
return ""+x+getMultiple(x,N-1);
}
public static String uncompress(String text, String count, String output)
{
if (text.equals(""))
{
return output;
}
if(text.charAt(0) == '(')
{
int FirstIndex = text.indexOf("(")+1;
String inner = text.substring(FirstIndex, text.lastIndexOf(")"));
//System.out.println(inner);
flag = false;
return uncompress (inner, count, output);
}
else if (Character.isLetter(text.charAt(0)))
{
//letter case - need to take the count we have accrued, parse it into an integer and add to output
if (flag==true)
{
//System.out.println(count);// * text.charAt(0);
String s = String.valueOf(text.charAt(0));
output += getMultiple(s,Integer.parseInt(count));
count ="1";
}
else
{
//System.out.println(count);// * text.charAt(0);
output += getMultiple(text,Integer.parseInt(count));
//System.out.println("output: "+output);
count="0";
}
}
else if(Character.isDigit(text.charAt(0)))
{
//digit case - need to add to the count but keep as a string because must be parsed later
if(flag)
count += (""+text.charAt(0));
else
{
count = "0";
count += (""+text.charAt(0));
}
}
//parse the *remainder* of the string, one character at a time, so pass in the substring(1)
return uncompress(text.substring(1), count, output);
}
}
Es ist eine gute Aufgabe! Aber die einzige Spezifikation, die Sie haben, sind die drei Proben? – Aris2World
Ich werde einige weitere Anweisungen hinzufügen –
Wie aus diesen Beispielen verstanden werden kann, nehmen wir an, dass die Zahl 11 in der Kette 11ab anzeigt, dass das nächste Symbol a 11 mal wiederholt werden soll. Wenn ein längeres Muster wiederholt werden soll, verwenden Sie Klammern: Nummer 4 im String4 (ab) gibt an, dass der Teilstring ab viermal wiederholt wird. Alle unkomprimierten Strings bestehen nur aus den beiden Symbolen a und b. Während die komprimierten Strings auch Zahlen und Klammern enthalten können, wie in den obigen Beispielen. –