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

时间:2015-08-03 12:09:37

标签: java string recursion indexof

所以我试图编写递归方法indexOf,它返回第一个String中第一个出现的第二个String的起始索引(如果找不到则返回-1)例如,indexOf(“Barack Obama”,“bam”)的调用将返回8.另外我知道 String 类有方法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 {

        }
    }
}

1 个答案:

答案 0 :(得分:1)

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

一个选项是:

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)空间/时间性能),这个任务不需要(使用.charAt)

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

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