leetcode 718. 最長重複子數組
package com.leetcode;
public class Main718 {
public int findLength(int[] A, int[] B) {
if(A.length == 0 || B.length == 0) {
return 0;
}
int m = A.length + 1;
int n = B.length + 1;
int ans = 0;
int[][] dp = new int[m][n];
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (A[i-1] == B[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
ans = Math.max(dp[i][j], ans);
}
}
}
return ans;
}
public static void main(String[] args) {
int[] A = {1,2,3,2,1};
int[] B = {3,2,1,4,7};
Main718 m = new Main718();
System.out.println(m.findLength(A,B));
}
}
leetcode 1143. 最長公共子序列
package com.leetcode;
public class Main1143 {
public int longestCommonSubsequence(String text1, String text2) {
int len1 = text1.length();
int len2 = text2.length();
int[][] dp = new int[len1+1][len2+1];
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (text1.charAt(i-1) == text2.charAt(j-1))
dp[i][j] = dp[i-1][j-1] + 1;
else
dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[len1][len2];
}
public static void main(String[] args) {
Main1143 m = new Main1143();
String text1 = "abcde", text2 = "ace";
System.out.println(m.longestCommonSubsequence(text1,text2));
}
}