最長重複子串,最長公共子串行, 最長公共子串

2021-06-28 15:24:57 字數 785 閱讀 9033

原題:首先這是乙個單字串問題。子字串r 在字串l 中至少出現兩次,則稱r 是l 的重複子串。重複子串又分為可重疊重複子串和不可重疊重複子串,這裡只是簡單討論最長可重疊的重複子串,給出基本演算法。

最長重複子串

用最笨的方法,逐個掃瞄,時間複雜度o(n^2), **如下,親測可用:

int lcs::comlen(const char*p, const char *q)

int lcs::longestrepeatsubstring(const char*p)}}

return maxlen;//返回最大的重複個數

}

最長公共子串
int lcs::comlen(const

char*p, const

char *q)

int lcs::longestrepeatsubstring(const

char*p, const

char* q)}}

return maxlen;//返回最大的重複個數

}

最長公共子串行

int c[100][100] = ;

int lcs::lcs_length(const

char* x, const

char *y)

}return c[m][n];

}return

0;}

最長公共子串行 最長重複子串

最長公共子串行 longest common subsquence s1 a b d a c e s2 b a b c e lcs abce abce 長度4 1 brute force 遞迴解法 從單個字元解決問題 某位置處若兩字元相等,則同時序號增加,最長長度 1 若不相等,則需要s1增加1個位...

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...

最長公共子串行 最長公共子串

1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...