我又来写bug了,不一定所有测试都通过,因为没咋测试,只通过测试示例系列。
不过是正儿八经的递归实现,不是用栈实现,记得题目上提示递归深度不能太深。
递归函数是fun(),不取名字系列。递归函数的作用是把 {}里的字符串给处理了然后返回给上层。k是str中 { 的下标,但str是私有变量。。
坚决不耦合。
绝不耦合。。
不耦合。。。
耦合。。。。
合。。。。。
。。。。。。
重要的事情说好几遍。。。。
// HABCBCABCBCABCBCD H{3:A{2:BC}}D
public class Test {
public StringBuilder out=new StringBuilder("");
private int c=0;
private char []str;
public Test(String str){
this.str=str.toCharArray();
}
public String dezip(){
for (int i = 0; i < str.length; i++) {
String temp="";
if(str[i]=='{'){
temp=fun(i);
i=c;
}else{
temp=Character.toString(str[i]);
}
out.append(temp);
}
return out.toString();
}
private String fun(int k){
int l=0;
for (int i = k+1; i < str.length; i++) {
if(str[i]==':'){
break;
}
l++;
}
String n=new String(str,k+1,l);
int num=Integer.valueOf(n);
StringBuilder o=new StringBuilder("");
for (int i = k+l+1; i <str.length; i++) {
if(str[i]=='{'){
o.append(fun(i));
i=c;
}else if(str[i]=='}'){
c=i;
break;
}else if(str[i]>='A'&&str[i]<='Z'){
o.append(str[i]);
}
}
StringBuilder o1=new StringBuilder("");
for (int i = 0; i < num; i++) {
o1.append(o);
}
return o1.toString();
}
public static void main(String[] args) {
Test t=new Test("H1{3:A{2:BC}}D");
System.out.println(t.dezip());
}
}