import java.util.Arrays;
/**
* @author administ
*
*/
public class SubSequence {
/**
* @param str1 第一个字符串
* @param str2 第二个字符串
*/
//如果str1[i] == str2[j] 左上
//如果str1[i] != str2[j] 比较l[i-1][j] 和 l[i][j-1]大小
void longest(String str1,String str2){
//m[i][j] 表示 在str1[i],str2[j]时最长子序列选择情况
//0 表示左 1表示上 2表示左上
int[][] m = new int[str1.length()+1][str2.length()+1];
//str1[i] str2[j]时最长子序列长度
int[][] l = new int[str1.length()+1][str2.length()+1];
for(int i = 0;i<str1.length();i++){
l[i][0] = 0;
m[i][0] = -1;
}
for(int j = 0;j<str2.length();j++){
l[0][j] = 0;
m[0][j] = -1;
}
for(int i=1;i<str1.length()+1;i++){
for(int j=1;j<str2.length()+1;j++){
if(str1.charAt(i-1)==str2.charAt(j-1)){
l[i][j] = l[i-1][j-1]+1;
m[i][j] = 2;
}else{
if(l[i][j-1]>l[i-1][j]){
l[i][j] = l[i][j-1];
m[i][j] = 0;
}
else {
l[i][j] = l[i-1][j];
m[i][j] = 1;
}
}
}
}
System.out.println(Arrays.deepToString(l));
}
public static void main(String[] args) {
String str2 = "bdcaba";
String str1 = "abcbdab";
SubSequence ss = new SubSequence();
ss.longest(str1, str2);
}
}
subsequence
最新推荐文章于 2021-06-12 09:43:58 发布