最大公共字串

2021-06-21 23:28:09 字數 1090 閱讀 5106

簡單dp問題

設兩個字串s1,s2,假設dp[i][j] 代表到s1的第i個字元及s2的第j個字元時,最大公共字串的數目

那麼  if(s1[i] == s2[j])  dp[i][j] = d[i-1][j-1] + 1  else dp[i][j] = 0

**如下:

dp二維陣列空間是可以優化的,可以變成一位陣列.dp是個二維矩陣,舉例如下

--a  b  c

a 1  0  0(第一行)

b 0  2  0(第二行)

c 1  0  3(第三行)

d 0  0  0 (第四行)

我們發現矩陣中求第二行的元素依賴於第一行,第三行依賴於第二行,但是不依賴於第一行,第n行依賴於第n-1行,和其他行無關,所以可以只儲存一位陣列可以實現空間優化

參考文獻:

最大公共字串

最簡單的方法就是依次比較,以某個串為母串,然後生成另乙個串的所有長度的子串,依次去母串中比較查詢,這裡可以採用先從最長的子串開始,減少比較次數,但是複雜度依然很高!然後重新看一下這個問題,我們建立乙個比較矩陣來比較兩個字串str1和str2 定義lcs i,j 當str1 i str2 j 時lcs...

最大公共字串

a i 1 j 1 1最大公共子串長度問題就是 求兩個串的所有子串中能夠匹配上的最大長度是多少。比如 abcdkkk 和 baabcdadabc 可以找到的最長的公共子串是 abcd 所以最大公共子串長度為4。下面的程式是採用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。請分析該解法的...

動態規劃 最大公共字串

問題定義 乙個字串s,去掉零個或者多個元素所剩下的子串稱為s的子串行。最長公共子串行就是尋找兩個給定序列的子串行,該子串行在兩個序列中以相同的順序出現,但是不必要是連續的。例如序列x abcbdab,y bdcaba。序列bca是x和y的乙個公共子串行,但是不是x和y的最長公共子串行,子串行bcba...