java lcs_LCS最长公共子序列java实现
packagekpp.base;/*** 獲取兩個字符串的最長公共子序列
*@authorkpp
**/
public classLCSTest {private static String lcs = "";public static voidmain(String[] args) {//TODO Auto-generated method stub//保留空字符串是為了getLength()方法的完整性也可以不保留//但是在getLength()方法里面必須額外的初始化c[][]第一個行第一列
String firstStr = "ABCBDAB";
String secondStr= "BDCABA";/*String[] x = new String[firstStr.length()+1];
String[] y = new String[secondStr.length()+1];*/String[] x=strToArray(firstStr);
String[] y=strToArray(secondStr);/*String[] x = {"", "A", "B", "C", "B", "D", "A", "B"};
String[] y = {"", "B", "D", "C", "A", "B", "A"};*/
int[][] b =getSearchRoad(x, y);
Display(b, x, x.length-1, y.length-1);
System.out.println("lcs:"+lcs);
}/*** 字符串轉數組,并且數組的第0個元素為""
*@paramstr
*@return
*/
private staticString[] strToArray(String str){
String[] strArray= new String[str.length()+1];
strArray[0] = "";for(int i = 1; i < strArray.length;i++){
strArray[i]= ""+str.charAt(i-1);
}returnstrArray;
}/*** 獲得LCS矩陣的路徑走向
*@paramx 第一個數組
*@paramy 第二個數組
*@return返回一個記錄決定搜索的方向的數組*/
public static int[][] getSearchRoad(String[] x, String[] y)
{int[][] b = new int[x.length][y.length];int[][] c = new int[x.length][y.length];for(int j = 0;j < y.length;j++){
c[0][j] = 0;
}for(int i = 0;i < x.length;i++){
c[i][0] = 0;
}for(int i=1; i
{for(int j=1; j
{//對應第一個性質//x[i].equals(y[j])是指x[i]與y[j]的值相同
if( x[i].equals(y[j]))
{
c[i][j]= c[i-1][j-1] + 1;
b[i][j]= 1;
}//x[i] == y[j]是指x[i]與y[j]的地址相同
/*if( x[i] == y[j])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}*/
//對應第二或者第三個性質
else if(c[i-1][j] >= c[i][j-1])
{
c[i][j]= c[i-1][j];
b[i][j]= 0;
}//對應第二或者第三個性質
else{
c[i][j]= c[i][j-1];
b[i][j]= -1;
}
}
}returnb;
}/*** 自矩陣右下至左上回溯,根據搜索路徑獲取LCS
*@paramb 搜索路徑數組
*@paramx 第一個數組
*@parami
*@paramj*/
public static void Display(int[][] b, String[] x, int i, intj)
{if(i == 0 || j == 0)return;if(b[i][j] == 1)
{
Display(b, x, i-1, j-1);
lcs+=x[i];
}else if(b[i][j] == 0)
{
Display(b, x, i-1, j);
}else if(b[i][j] == -1)
{
Display(b, x, i, j-1);
}
}
}
總結
以上是生活随笔為你收集整理的java lcs_LCS最长公共子序列java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NetLimiter
- 下一篇: Scons环境搭建和编译原理概述及嵌入式