最长公共子序列算法
/*
* 最长公共子序列算法。
*/
public class LCS {
public static void main(String[] args) {
// TODO Auto-generated method stub
String arr1="abcdefghijk";
String arr2="adefabcdk";
String subMax="";
subMax=get_LCS_sub(arr1,arr2);
System.out.println("LCS..."+subMax);
}
private static String get_LCS_sub(String arr1, String arr2) {
// TODO Auto-generated method stub
String sub="";
int ti,tj;
int max=0;
int rs=0,re=0;//记录最长子串在arr1中的开始和结束位置。
for(int i=0;i<arr1.length();){
ti=i;//记录i当前位置。
for(int j=0;j<arr2.length();){
tj=j;//记录j当前位置。
while(i<arr1.length()&&j<arr2.length()&&arr1.charAt(i)==arr2.charAt(j)){
i++;
j++;
}
j=tj+1;
if((i-ti)>max){
max=i-ti;//记录最长子串。
rs=ti;
re=i;
}
}
i=ti+1;
}
sub=arr1.substring(rs, re);
return sub;
}
}