实现我自己的 indexOf 方法的递归版本

Implement my own recursive version of the indexOf method

所以我正在尝试编写递归方法indexOf,其中return是第一个字符串中第二个字符串第一次出现的起始索引字符串(如果找不到则为 -1)。例如,调用 indexOf(“Barack Obama”,“bam”)会 return 8。我也知道 String class 有方法 IndexOf,但我不想使用它。

到目前为止这是我的代码:

public class MyClass {

    public static void main(String[] args) {
    }

    public static int indexOf(String s, String t) {
        return abc(s, t, 0);
    }

    public static int abc(String a, String b, int c) {
        if ((a.length() - c) < b.length()) {
            return -1;
        } else if (b.equals(a.substring(c, c + 3))) {
            return c;

        } else {

        }
    }
}

这取决于您要使用多少库。

一个选项是:

int indexOf(String container, String text, int index) {
  //Too short container
  if (container.length() < text.length()) return -1; 
  //found
  else if (container.startsWith(text)) return index;
  //keep searching
  else return indexOf(container.substring(1), text, index+1);
}
indexOf("banana", "nana", 0) == 2;

如果您不想使用.startsWith,那么您需要实现您自己的版本。一个很好的练习是尝试在不使用 .substring 方法的情况下执行此操作,这很糟糕(因为它创建了字符串的副本,O(n) space/time 性能),并且不需要此任务(使用 .charAt)

您还可以将官方方法 indexOf 从包含索引的递归调用中分离出来,以便更清晰)。

你也应该仔细考虑边缘情况:)