2015-08-03 50 views
0

所以我想寫遞歸方法indexOf它返回第一個字符串中第一個字符串的第一次出現的起始索引(如果未找到,則返回-1)。例如,indexOf(「Barack Obama」,「bam」)的調用將返回8.另外我知道字符串類有方法IndexOf,但我不想使用它。執行我自己的遞歸版本的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

而你的問題是? – RealSkeptic

+0

你的代碼還沒有遞歸。 – Codebender

+1

另外,請給方法和變量有意義的名字。你的代碼不太可讀。不要使用's','t','a','b','c',但是可以解釋這些是什麼。一種方法不應該是'abc' - 它的名字應該解釋它的作用。 – RealSkeptic

回答

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以獲得更多清晰度)。

你應該仔細考慮邊緣情況:)

+0

@AntonNjavro奇怪的問題。哪裏都行?這是一個完整的方法(除了最後一行,這是一個用法示例),所以它會替換您的方法定義,無論它在哪裏 –