【问题标题】:Implement my own recursive version of the indexOf method实现我自己的 indexOf 方法的递归版本
【发布时间】:2015-08-03 12:09:36
【问题描述】:

所以我正在尝试编写 recursive 方法indexOf,它返回第一个字符串中第二个字符串第一次出现的起始索引(如果没有找到,则返回-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 {

        }
    }
}

【问题讨论】:

  • 你的问题是?
  • 您的代码中还没有递归。
  • 另外,请给方法和变量起有意义的名字。您的代码不是很可读。不要使用s,t,a,b,c,而是使用解释这些内容的名称。一个方法不应该是abc - 它的名字应该解释它的作用。

标签: java string recursion indexof


【解决方案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 从包含索引的递归调用中拆分出来以更清晰)。

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

【讨论】:

  • @AntonNjavro 奇怪的问题。哪里都行?它是一个完整的方法(除了最后一行,它是一个用法示例),因此它将替换您的方法定义,无论它在哪里
猜你喜欢
  • 2020-08-13
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 2019-03-01
相关资源
最近更新 更多