Мне нужно написать рекурсивный метод indexOf, который принимает два параметра Strings as и возвращает начальный индекс первого вхождения второй строки внутри первой строки (или -1, если не найден). Я должен решить эту проблему, используя рекурсию. Вот некоторые примеры результатов:метод indexOf с использованием рекурсии
indexOf("Barack Obama", "Bar") 0
indexOf("Barack Obama", "ck") 4
indexOf("Barack Obama", "a") 1
indexOf("Barack Obama", "McCain") -1
indexOf("Barack Obama", "BAR") -1
Это мое решение, но это дает мне 6 для IndexOf («Барак Обама», «Маккейн») вместо -1.
public static int indexOf(String s1, String s2) {
if(s1.equals(s2))
return 0;
else
return indexOfHelper(s1, s2, 0);
}
private static int indexOfHelper(String s1, String s2, int ctr) {
if(s2.length() > s1.length())
return -1;
if(s2.length() == 0 || s1.length() == 0) //base case
return ctr;
else //recursive case
if(s1.charAt(0) == s2.charAt(0)){ //if there is a matching character
if(s1.substring(0, s2.length()).equals(s2))
return ctr; //if there is a matching character and the rest of the strings match as well
else
return -1; //if there is a matching character but the rest of the strings don't match
}
else
return 1 + indexOfHelper(s1.substring(1), s2, ctr);
}
Что вы имеете в виду, когда вы говорите "это не работает"? Как это не работает? –
Зачем нужен код «1 +» (рекурсивно) индекс, если вы ищете * начальный * индекс совпадения? Продвиньте программу медленно (* с помощью отладчика * и/или вручную) и проверьте значения и предположения об этом. – user2864740
например: indexOf («Barak obama», «ck») дает мне ответ 5 вместо 4 – Bahman