亞子哥刷題之路 最長公共子串行長度

2021-10-07 17:20:48 字數 823 閱讀 2568

給定兩個字串s和t,返回這兩個字串的最長公共子串行的長度。

dp[i][j]含義:s[0…i)和t[0…j)的最長公共子串行長度。

注:dp[i][j]也可以定義為s[0…i]和t[0…j]的最長公共子串行長度,兩種定義方式邊界值的處理方式不同。

看dp[i][j]與dp[i-1,j]、dp[i,j-1]、dp[i-1,j-1]的關係。

dp[i][j]的上一步狀態 :

dp[i][j]=max

dp[i][j]=max

---------------------------------

為什麼這種情況下,dp[i][j]的上一步狀態沒有dp[i-1][j-1]?

因為當s[i-1]!=t[j-1],dp[i][j]=max

dp[i-1][j-1]<= min

初始化值

dp[i][0]=0    // s前i個字元s[0...i-1]和t前0個字元

dp[0][j]=0 // s前0個字元和t前t[0..j-1]個字元

public static int f(string s,string t)

if(s.length()<1||t.length()<1)

int dp=new int[s.length()+1][t.length()+1];

for(int i=1;i<=s.length();i++)else

}} return dp[s.length()][t.length()];

}

求最長公共子串行長度

1.求最長公共子串行 子串行可以不連續 這是一道動態規劃題,設二維陣列dp i j dp i j 表示a串前i個字元 包括第i個 與b串前j個字元 包括第j個 所有的公共子串行的最長長度。例如,a串abbcd,b串abcd,dp 3 3 就表示的a的前三個字元與b的前三個字元的最長公共子串行長度,值...

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

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 當然我們現在一眼就可以看出來最長公...