public class longestcommonsubsequence3
public static int compute(char str1, char str2)
}system.out.println("substring1:" + new string(str1));
system.out.println("substring2:" + new string(str2));
system.out.print("lcs:");
int i = str1.length, j = str2.length;
string temp = "";
while (i != 0 && j != 0)
else
}for (int k = temp.length() - 1; k >= 0; k--)
system.out.println();
return chess[str1.length][str2.length];
}public int compute(string str1, string str2)
}//***************=
public class longestcommonsubsequence2
public static int compute(char str1, char str2)
}system.out.println("substring1:" + new string(str1));
system.out.println("substring2:" + new string(str2));
system.out.print("lcs:");
int i = 0, j = 0;
while (i < substringlength1 && j < substringlength2)
else if (opt[i + 1][j] >= opt[i][j + 1])
i++;
else
j++;
}system.out.println();
return opt[0][0];
}public int compute(string str1, string str2)
}//********************
package com.lifeibigdata.algorithms.string;
/** * created by lifei on 16/5/25.
*/public class longestcommonsubsequence ;
char y = ;
longestcommonsubsequence lcs = new longestcommonsubsequence();
lcs.printlcs(lcs.lcslength(x, y), x, x.length-1, y.length-1);
}void printlcs(int b,char x,int i,int j)else if(b[i][j] == 2)
printlcs(b,x,i - 1,j);
else
printlcs(b,x,i,j - 1);
}int lcslength(char x,char y)
else if(c[i - 1][j] >= c[i][j - 1])else
}return b;
}}/**
* 滾動陣列只求大小,可以降低空間複雜度,時間複雜度不變
* 求全部的lcs,使用深搜或廣搜
* 求有幾個lcs,即只求lcs數目,計算有多少分支,即2的多少次方
最長公共子串行 最長公共子串
1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...
最長公共子串行 最長公共子串
1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...
最長公共子串 最長公共子串行
子串要求連續 子串行不要求連續 之前的做法是dp求子序列 include include include using namespace std const int inf 0x3f3f3f3f const int mod 1000000007 string s1,s2 int dp 1010 10...