* 求最长连续子串
* 如果A[i] == B[j],那么dp[i+1][j+1] = dp[i][j] + 1;仅有这一个条件
* 字符串abcde abgde
* 0 0 0 0 0 0
* 0 1 0 0 0 0
* 0 0 2 0 0 0
* 0 0 0 0 0 0
* 0 0 0 0 1 0
* 0 0 0 0 0 2
* 最后返回其中的最大值
public static int Str1(String str1, String str2){
char[] array1 = str1.toCharArray();
char[] array2 = str2.toCharArray();
int len1 = array1.length;
int len2 = array2.length;
int max = 0;
int[][] cap = new int[len1+1][len2+1];
for(int i = 0; i< len1; i++){
for(int j = 0; j<len2; j++){
if(array1[i] == array2[j]){
max = max>(cap[i+1][j+1] = cap[i][j]+1)?max:cap[i+1][j+1];
}
}
}
return max;
}
* 求最大子序列
* 如果A[i] == B[j],那么dp[i+1][j+1] = dp[i][j] + 1;
* 如果A[i] != B[j],那么dp[i+1][j+1] = max(dp[i+1][j],dp[i][j+1])
* 需要满足这两个条件
* 字符串abcde abgde
* 0 0 0 0 0 0
* 0 1 1 1 1 1
* 0 1 2 2 2 2
* 0 1 2 2 2 2
* 0 1 2 2 3 3
* 0 1 2 2 3 4
* 最后返回右下角的值(就是数组中的最大值)
public static int Str(String str1, String str2){
char[] array1 = str1.toCharArray();
char[] array2 = str2.toCharArray();
int len1 = array1.length;
int len2 = array2.length;
int[][] cap = new int[len1+1][len2+1];
for(int i = 0; i< len1; i++){
for(int j = 0; j<len2; j++){
if(array1[i] == array2[j])
cap[i+1][j+1] = cap[i][j]+1;
else{
cap[i+1][j+1] = cap[i+1][j]>cap[i][j+1]?cap[i+1][j]:cap[i][j+1];
}
}
}
return cap[len1][len2];
}