Так что ошибка в вашем коде связана с тем, где вы вычисляете postfix1
и postfix2
- обратите внимание, что вы не компенсируете postfix2
.
Чтобы выполнить эту рекурсию, вам нужно разобраться в нескольких случаях:
- Когда вы сталкиваетесь с оператором, вам нужно выбрать и переместить оператора вправо, а затем обработать любую оставшуюся часть строки, которая не была обработана
- Когда вы сталкиваетесь с письмом и оператором, вы должны просто вернуть письмо
- Когда вы встречаете две буквы, вы должны просто вернуть эти две буквы
Это означает, что когда вы сталкиваетесь с чем-то вроде +-abc
, вы будете делать следующие шаги:
f("+-abc") => return f("-abc") + "+" + f(rem1)
f("-abc") => return f("abc") + "-" + f(rem2)
f("abc") => return "ab"
rem2 = "c" (remainder of the string)
f("c") => return "c"
rem1 = "" (nothing left in the string to parse)
which constructs "ab-c+"
Это должно работать:
public static String pre2post(String pre){
if(pre.length() <= 1){
return pre;
}
if(!Character.isLetter(pre.charAt(0))){
String a = pre2post(pre.substring(1)) + pre.charAt(0);
String b = pre2post(pre.substring(a.length()));
return a + b;
}else if(!Character.isLetter(pre.charAt(1))){
return pre.substring(0,1);
}else{
return pre.substring(0,2);
}
}