递归子串搜索java

时间:2018-04-27 07:19:53

标签: java recursion substr

我正在尝试进行递归搜索以检查子字符串是否出现在主字符串中。如果它不存在则返回false,如果存在则返回true。我不允许在java

中使用containscs()方法

这是我到目前为止所尝试的

public boolean myContains(String s1, String s2){
    if(s1 == null || s2 == null)
        return false;
    if(s1.isEmpty() || s2.isEmpty())
        return false;
    //int remain= s2.substring(s1);
    return myContains(s1, s2.substring(1));
}

调用方法如下所示

System.out.println( test.myContains("an", "banana"));

2 个答案:

答案 0 :(得分:2)

你必须检查s2是否以s1开头。如果是,则返回true。如果没有删除s2的第一个字符并重做测试。

我认为这是你尝试过的。但你错过了检查s2是否以s1开头然后返回true

的块
public boolean myContains(String s1, String s2){
    if(s1 == null || s2 == null)
        return false;
    if(s1.isEmpty() || s2.isEmpty())
        return false;
    if(s2.startsWith(s1))
        return true;
    return myContains(s1, s2.substring(1));
}

答案 1 :(得分:0)

如果你应该自己实现一切,那么这也应该有用

public boolean myContains(String s1, String s2){
    if(s1 == null || s2 == null)
        return false;
    if(s1.isEmpty() || s2.isEmpty())
        return false;
    if(s1.length() > s2.length())
        return false;

    boolean contains = true;
    for(int i=0; i<s1.length(); i++){
       if(s1.charAt(i)!=s2.charAt(i)){
          contains=false; 
          break;
       }
    }
    if(contains == true){return contains;}
    return myContains(s1, s2.substring(1));
}