最長公共字串和最長公共子串行

2021-07-30 06:55:18 字數 657 閱讀 8379

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

建立乙個矩陣來儲存兩個字串出現相同字元的地方,比如「abccd」和「abcefc」就有

abccd

a10000

b02000

c00300

e00040

f00000

c00100

這樣就有每次遇到相等的都加上下他的斜上方的位置的值,然後使用乙個max變數來記錄目前的最大值即可

public class solution }}

return max;}}

給出兩個字串,找到最長公共子串行(lcs),返回lcs的長度。

這個題和最長公共字串的區別就在於公共字串必須是連著的,但是這個可以不連著!

對於公共子串行其實也是要建立乙個m*n的矩陣a來記錄當前的最長子序列的長度,但是矩陣更新的規則變成:

public class solution 

else

f[i][j] = math.max(i-1>=0? f[i-1][j]:0,j-1>=0?f[i][j-1]:0);

max = math.max(f[i][j], max);}}

return max;}}

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

二者含義沒搞清楚,雅虎的筆試就這樣的寫錯了。求最長公共字串的題目寫成了最長公共子串行。子串要求字元必須是連續的,但是子串行就不是這樣了。悲催了。子串行跟子串的求法類似,都是使用動態規劃的思想,s1每次增加乙個字元,看與s2當前位置的字元是不是相同,如果相同做相應的處理,如果不同,做另外的處理。子串行...

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

問題定義 最長公共子串行,序列的意思是順序對就可以,並不需要是連續的。例如 abcde oalblcldle其中abcde就是這兩個字串的最長公共子串行。容易知道乙個長度為n的字串的子串行有2 n 個,假設兩個字串的長度都為n,直接去求解兩個字串的最長公共子串行需要用這2 n 個序列串去匹配另外乙個...

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

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...