我期待在算法上http://en.wikipedia.org/wiki/Longest_common_substring_problem最長公共子算法O(N * M)蠻力
他們用動態規劃,這給他們的O(nm)的時間。但是,使用強力算法難以達到同樣的複雜性?我正在做一個家庭作業問題,在O(n * m)時間內找到這個算法,其中n和m是字符串長度。
對於字符串A和字符串B,我檢查A [i]是否等於B中的任何元素。如果它確實等於某個B [j],則檢查A [i + 1]是否等於B [j + 1],那麼如果A [i + 2] = in B [i + 2]等等,直到沒有更多匹配或字符串結束。如果是不匹配的情況,則繼續從B中檢查的最後一個元素開始檢查B中的A [i]。我們爲每個A元素重複此過程,同時存儲迄今發現的最大子字符串的開始和結束索引。這個算法看起來是O(n * m)。如果我對此沒有錯,是否有理由不使用這種方法?
感謝您的任何幫助。
好吧,你是對的。我想在這種情況下,我會讓A [i]檢查下一個B元素B [j + 1],而不是最後一個選中的元素。然而,如果n = m,那麼這將是每個A元素的n^2次迭代,然後給我O(n^3)。維基的方式。謝謝。 – roverred