实现我自己的 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 从包含索引的递归调用中分离出来,以便更清晰)。
你也应该仔细考虑边缘情况:)
所以我正在尝试编写递归方法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 从包含索引的递归调用中分离出来,以便更清晰)。
你也应该仔细考虑边缘情况:)