2016-01-23 69 views
-1

所以我回答這個問題的難度很大,http://codingbat.com/prob/p186177代碼中的CodingBat差異

給定一個字符串和一個非空的子字符串sub,遞歸地計算sub在字符串中出現的次數,而不會重疊子字符串。

  • strCount("catcowcat", "cat") → 2
  • strCount("catcowcat", "cow") → 1
  • strCount("catcowcat", "dog") → 0

所以我決定谷歌的答案,研究它。抹去它並嘗試自己。我想出了。

public int strCount(String str, String sub) { 
    if(sub.length() > str.length()) 
     return 0; 
    if(str.substring(0,sub.length()).equals(sub)) 
     return 1 + strCount(str.substring(str.length()),sub); 
    return strCount(str.substring(1),sub); 
} 

而答案是:

public int strCount(String str, String sub) { 
if (str.length() < sub.length()) return 0; 
if (str.substring(0, sub.length()).equals(sub)) 
    return 1 + strCount(str.substring(sub.length()), sub); 
return strCount(str.substring(1), sub); 

}

我不知道爲什麼我一直在看,在過去10分鐘的差別,並不能明白爲什麼當我運行我的代碼只返回0或1作爲答案。任何人都可以找到差異嗎?

+0

爲什麼downvotes? – BlueMoon93

回答

2

strCount有不同的論點。 (sub.length()), sub);(str.length()),sub);

爲了將來的參考,您可以使用像Diff這樣的工具來檢查文件的差異。

+0

哦,領主謝謝:DDD – NewtoJava

1

如果字符串的開頭符合sub,則表示子字符串錯誤:您應該從sub.length()開始,而不是str.length()

public static int strCount(String str, String sub) { 
    if (sub.length() > str.length()) 
     return 0; 
    if (str.substring(0, sub.length()).equals(sub)) 
     return 1 + strCount(str.substring(sub.length()), sub); // <-- sub.length() here 
    return strCount(str.substring(1), sub); 
} 

或者,你可以提高邏輯一點:不是遞增至每個字符會在同一時間,看看是否字符串sub開始,你可以調用indexOf檢索第一個索引,其中字符串有sub出現。

這將是一個示例代碼:

public static int strCount(String str, String sub) { 
    int index = str.indexOf(sub); 
    if (index == -1) return 0; 
    return 1 + strCount(str.substring(index + sub.length()), sub); 
}