Dynamic Programming Flashcards
1
Q
Longest Common Subsequence
A
/* Returns length of LCS for X[0..m-1], Y[0..n-1] */ int lcs( char[] X, char[] Y, int m, int n ) { int L[][] = new int[m+1][n+1];
/* Following steps build L[m+1][n+1] in bottom up fashion. Note that L[i][j] contains length of LCS of X[0..i-1] and Y[0..j-1] */ for (int i=0; i<=m; i++) { for (int j=0; j<=n; j++) { if (i == 0 || j == 0) L[i][j] = 0; else if (X[i-1] == Y[j-1]) L[i][j] = L[i-1][j-1] + 1; else L[i][j] = max(L[i-1][j], L[i][j-1]); } } return L[m][n]; }
2
Q
Longest Common Substring
A
int longestCommonSubString(char[] word1, char[] word2, int m, int n) { int[][] table = new int[m+1][n+1]; int max = 0; for (int i = 0; i <= m;i++) { for (int j = 0; j <= n;j++) { if (i == 0|| j == 0) table[i][j] =0; else if (word1[i-1] == word2[j -1]) { table[i][j] = 1+table[i-1][j-1]; if (max < table[i][j]) max = table[i][j]; } else if (word1[i-1] != word2[j-1]) { table[i][j] = 0; } } } return max; }