3
該分配包括解壓縮字符串。特別是,如圖所示,代碼必須工作3個樣本。 解壓更多嵌套字符串的字符串
我的代碼在這裏工作的樣本的前2個。但是,我無法拿出第三個樣本。可能我不明白遞歸的概念。你可以幫我嗎?
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);
}
}
這是一個很好的作業!但你唯一的規格是三個樣品? – Aris2World
我會添加一些指令 –
從這些例子可以理解,我們假設字符串11ab中的數字11表示下一個符號被重複11次。如果我們想要一個更長的模式重複使用括號:string4(ab)中的數字4表示子串ab重複4次。所有未壓縮的字符串只由兩個符號a和b組成。雖然壓縮字符串也可以包含數字和圓括號,如上例所示。 –