java 實現 最長公共子序列
package shousi;
/**
* 求最長公共子序列(LCS) 動態規劃
*/
public class Test50 {
public static String findLCS(String a,String b) {
int alen = a.length();
int blen = b.length();
int[][] dp = new int[alen + 1][blen + 1];
for(int i = 0;i <= alen;i++) {
for(int j = 0;j <= blen;j++) {
dp[i][j] = 0;
}
}
for(int i = 0;i < alen;i++) {
for(int j = 0;j < blen;j++) {
if(i == 0||j == 0){
if(a.charAt(i) == b.charAt(j)) {
dp[i][j] = 1;
}
else{
dp[i][j] = 0;
}
//跳過本次迴圈體中餘下尚未執行的語句
continue;
}
if(a.charAt(i) == b.charAt(j)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}else {
dp[i][j] = dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j] : dp[i][j - 1];
}
}
}
String ans = "";
for(int i = alen - 1,j = blen -1 ;i >= 0 && j >= 0;) {
if(a.charAt(i) == b.charAt(j)) {
ans += a.charAt(i);
i--;j--;
}else if(dp[i-1][j] > dp[i][j-1]){
i--;
}else {
j--;
}
}
return new StringBuilder(ans).reverse().toString();
}
public static void main(String[] args) {
String res = findLCS("1d2ef3","d65e9f73");
System.out.print(res);
}
}
相關文章
- 最長公共子序列(JAVA)Java
- 最長公共子序列
- 最長公共子序列的程式碼實現
- 最長公共子序列求方案數
- 線性dp:最長公共子序列
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 演算法題:最長公共子序列演算法
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 動態規劃(最長公共子序列LCS)動態規劃
- LCS 演算法:Javascript 最長公共子序列演算法JavaScript
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 最長公共子序列,遞迴簡單程式碼遞迴
- 最長遞增子序列-Java 實現Java
- [演算法筆記]動態規劃之最長公共子串和最長公共子序列演算法筆記動態規劃
- 最長公共子序列問題—動態規劃sdut動態規劃
- LeetCode 1143.最長公共子序列LeetCode
- [題解]P1439 【模板】最長公共子序列
- 最長公共子串 二維陣列 Go實現陣列Go
- 字串篇(python)—兩個字串的最長公共子序列字串Python
- 動態規劃經典問題----最長公共子序列動態規劃
- 51nod-基因匹配+luogu-【模板】最長公共子序列
- lCS(最長公共子串)
- 最長上升子序列
- 經典演算法題每日演練——最長公共子序列演算法
- 最長公共子序列&迴文字串 nyoj動態規劃字串動態規劃
- [譯] Swift 演算法學院 - 最長公共子序列演算法Swift演算法
- [Java] 藍橋杯ADV-202 演算法提高 最長公共子序列Java演算法
- 線性dp:最長公共子串
- 動態規劃之最長公共子序列求解動態規劃
- 兩個字串的最長公共子串字串
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- “最長公共字串子序列”問題的動態規劃法演算法字串動態規劃演算法
- 線性dp:最長上升子序列
- 領釦LintCode演算法問題答案-77. 最長公共子序列演算法
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- 最長公共子序列與最小編輯距離-你有更快的演算法麼?演算法