проблема с рекурсией и функцией равенства строк - PullRequest
0 голосов
/ 17 апреля 2020

'код должен искать цель в подстроках str. Он сравнивает подстроки строки str с целью. он начинает сравнение с первой подстроки (которая состоит из символов от индекса 0 до индекса target.length-1 для str). если подстрока не равна target, она удаляет первый символ из str и снова возвращает его функции. если длина str меньше целевой длины, возвращается false. Пример '

', если str = "superman" & target = "man". Первая подстрока «sup» по сравнению с целевой «man». Это неверно, поэтому "s" удаляется. следующая подстрока «upe» по сравнению с «man», опять-таки false, поэтому «u» удаляется. next «per» с «man» и «p» удаляется. '

' До тех пор, пока подстрока не будет "man" по сравнению с целевой "man". Здесь он должен возвращать true, но он не выполняет и вместо этого переходит к удалению «m» и продолжению «

», скорее всего, проблема в строке 7 '

public static boolean contains(String str, String target) {
    if(str == null || target == null) {   //null check
        return false;
    }
    if(str.length() < target.length()) {  // when string has less size than target, naturally its false
        return false;
    } else if(target.equals(str.substring(0,target.length()-1))) {  //this is where the problem is
                                                                    //more specifically, it isn't comparing the strings. 
                                                                    //Here if str and target are equal they should return true, but when the target is equal to str, it doesnt return true, instead treats it is if target is not equal to str.
        return true;
    } else {
        return contains(str.substring(1),target);
    }
}

1 Ответ

0 голосов
/ 17 апреля 2020

Вы правы, проблема в строке 7, вам не нужно вычитать 1 для цели.

Метод:

public static boolean mycontains(String str, String target) {
    if(str == null || target == null) {   
        return false;
    }
    if(str.length() < target.length()) {  
        return false;
    } else if(target.equals(str.substring(0,target.length()))) {  
        return true;
    } else {
        return mycontains(str.substring(1),target);
    }
}
...