1. 程式人生 > >LintCode-最長公共字串

LintCode-最長公共字串

79. 最長公共子串

給出兩個字串,找到最長公共子串,並返回其長度。

注意事項

子串的字元應該連續的出現在原字串中,這與子序列有所不同。

樣例

給出A=“ABCD”,B=“CBCE”,返回 2

挑戰

O(n x m) time and memory.

標籤

字串處理


網上看到的都是dp解法,時間複雜度O(n^2),但我第一次寫了一個多次移位計算相同位置最長字串來解決,發現不僅時間複雜度一樣還省了空間,不過其實過程和dp差不多,但思路比較容易懂。
class Solution {
public:
    /**
     * @param A: A string
     * @param B: A string
     * @return: the length of the longest common substring.
     */
int lcs(string a, string b, int x, int y) { int max = 0, cur = 0; for (int i = 0; i<a.length() - x; i++) { if (y + i == b.length()) { max = max<cur ? cur : max; return max; } if (a[x + i] != b[y + i]) { max = max<cur ? cur : max
; cur = 0; } else { cur++; } } max = max<cur ? cur : max; return max; } int longestCommonSubstring(string &A, string &B) { // write your code here string a(A), b(B); int max = 0; for (int i = 0; i<a.length(); i++) { int
cur = lcs(a, b, i, 0); max = max<cur ? cur : max; } for (int i = 0; i<b.length(); i++) { int cur = lcs(a, b, 0, i); max = max<cur ? cur : max; } return max; } };