Рекурсия в Java. После и перед каждой гласной вставить "*" по условию ниже
Прошу помощи, как коректно написать рекурсию? В интернете уже лазила, но ничего толкового не нашла. Вот условие:
> Дано - строка. Напишите рекурсивный метод, возвращающий новую строку,
> где все гласные отделены от примыкающих букв символом ("*").
> Предполагается, что все слова состоят из букв латинского алфавита.
> String interviewRecursionTest(String line);
> interviewRecursionTest("hello") -> "h*e*ll*o"
> interviewRecursionTest("healo") -> "h*e*a*l*o"
> interviewRecursionTest("abc") -> "a*bc" interviewRecursionTest("oab")
> -> "o*a*b"
Вот мой код, который работает не так как надо:
public class Words {
private String result = "";
private String engAlp = "aeiouyAEIOUY";
private final int[] ENG_ASCII;
public Words() {
this.ENG_ASCII = put(engAlp);
}
public String interviewRecursionTest(String line) {
String operation = line;
String temp = "";
if (operation.equals("")) {
return temp;
}
for (int i = 0; i < operation.length(); i++) {
for (int j = 0; j < ENG_ASCII.length; j++) {
if (operation.charAt(i) == ENG_ASCII[j]) {
temp += "*" + operation.charAt(i);
operation = operation.substring(i+1);
if (i + 1 >= operation.length()) {
return temp;
}
interviewRecursionTest(operation);
}
}
temp += operation.charAt(i);
}
return temp;
}
public int[] put (String str) {
int[] engASCII = new int[12];
for (int i = 0; i < str.length(); i++) {
engASCII[i] = (int) str.charAt(i);
}
return engASCII;
}
}
public class Test {
public static void main(String[] args) {
Words words = new Words();
System.out.println(words.interviewRecursionTest("hello"));
}
}
Ответы (1 шт):
Автор решения: vp_arth
→ Ссылка
Необходимость рекурсии тут довольно синтетическая, но задание есть задание.
Можно разбивать строку пополам, склеивая подзадачи через звёздочку, если нужно:
private final static String engAlp = "aeiouyAEIOUY";
public static String interviewRecursionTest(String line) {
if (line.length() == 1) {
return "" + line.charAt(0);
}
int pivot = line.length() / 2;
String left = line.substring(0, pivot);
String right = line.substring(pivot);
boolean needSep = engAlp.indexOf(left.charAt(pivot-1)) != -1
|| engAlp.indexOf(right.charAt(0)) != -1;
return interviewRecursionTest(left)
+ (needSep ? "*" : "")
+ interviewRecursionTest(right);
}
public static void main(String []args){
System.out.println(interviewRecursionTest("oab, friend"));
}
o*a*b, fr*i*e*nd