2015-10-28 60 views
2

我需要寫在那裏給定一組字符key找到一個字符串str這樣如何遞歸查找字符串中的一組字符?

findKeys("fooo","foo") //returns 3 
//foo- 
//fo-o 
//f-oo 

findKeys("foobarfoo","obo") //returns 4] 
//--ob----o 
//-o-b---o- 
//-o-b----o 
//--ob---o- 

下存在的唯一實例的數量是我迄今爲止功能的功能,我不知道我錯過了什麼,但我只知道它沒有找到所有的實例,所以它沒有正確地遍歷字符串。

function findKeys(str, key) { 
    var count = count || 0; 

    if(str.length <= key.length || key.length === 1) { 

    if(str.slice(0, key.length) === key) { 
     return 1 
    } 

    return 0 
    } 

    if(str[0] === key[0]) { 
    count += findKeys(str.slice(1), key.slice(1)) 
    } 

    count += findKeys(str.slice(1), key) 

    return count 
} 

回答

2

剛剛從你的函數刪除

|| key.length === 1 

。我不確定你爲什麼在那裏 - 當key.length是1但str.length是> key.length時,結果會給出錯誤的結果(因爲你沒有考慮在str中跳過一些字符的情況,將字符串的後面的字符與鍵匹配)。

+0

哇。這是一個快速的迴應,你是完全正確的。這是正確的在我面前,我無能爲力。我可以問你怎麼看得這麼快?我一直在尋找這些好幾天,並試圖寫出每一個函數調用來試圖更好地觀察發生的事情。 –

+0

我只是讀了其餘的 - 這是有道理的。 Key.length在第一次通過時看起來很好(我做了一個疏忽),但當我回到它時,我想知道爲什麼你需要它,因爲第一部分應該照顧它。多一點時間讓我知道爲什麼它會導致它失敗。然後,我跑了幾個測試用例來確保它能正常工作併發布。 –

相關問題