51Nod 1006 最長公共子序列Lcs
動態規劃,轉移方程為:字元相同dp[i][j]=dp[i-1][j-1]+1;不同dp[i][j]=MAX(dp[i-1][j],dp[i][j-1])
最後根據MAX值和dp[i][j](dp[i][j]始終是最大值)來判斷哪個字元相同,則存進stringbuilder中。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LCS {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s1 = in.readLine();
String s2 = in.readLine();
char[] str1 = s1.toCharArray();
char[] str2 = s2.toCharArray();
int len1 = str1.length;
int len2 = str2.length;
int[][] dp = new int[len1+1][len2+1];
//計算DP值
for (int i = 1; i <=len1; i++) {
for (int j = 1; j <=len2; j++) {
if (str1[i-1] == str2[j-1])
dp[i][j] = dp[i-1][j-1]+1;
else
dp[i][j]= Math.max(dp[i-1][j], dp[i][j-1]);
}
}
StringBuilder stringBuilder = new StringBuilder();//因為String經常更改會導致效能低下,StringBuilder經常改動效率最高
int k = 0,i = len1 , j = len2;
//System.out.println(dp[len1][len2]);
while (k != dp[len1][len2]){
if (dp[i-1][j] == dp[i][j])//當前字元與另一字串相對應字元不同
i--;
else if (dp[i][j-1] == dp[i][j])//當前字元與另一字串相對應字元不同
j--;
else {
if (dp[i][j] != dp[i-1][j-1]) {//當前字元與另一字串相對應字元相同
stringBuilder.insert(0, str1[i - 1]);//存進去
k++;
}
i--;
j--;
}
}
System.out.println(stringBuilder.toString());
}
}
相關文章
- 最長公共子序列LCS 輸出所有LCS
- 動態規劃(最長公共子序列LCS)動態規劃
- lCS(最長公共子串)
- 最長公共子序列
- 最長公共子序列(JAVA)Java
- CF #683 (Div. 2)D. Catching Cheaters【最長公共子序列LCS變形】
- 牛客網 Coincidence(最長公共子串LCS板題)IDE
- 線性dp:最長公共子序列
- 最長公共子序列求方案數
- java 實現 最長公共子序列Java
- 最長公共子序列 Longest Common Subsequence
- LeetCode 1143.最長公共子序列LeetCode
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 最長公共子序列你學會了嗎
- [題解]P1439 【模板】最長公共子序列
- 最長公共子序列問題—動態規劃sdut動態規劃
- 字串篇(python)—兩個字串的最長公共子序列字串Python
- 51nod-基因匹配+luogu-【模板】最長公共子序列
- 動態規劃經典問題----最長公共子序列動態規劃
- 最長上升子序列
- 經典演算法題每日演練——最長公共子序列演算法
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- [譯] Swift 演算法學院 - 最長公共子序列演算法Swift演算法
- 51nod 1202 子序列個數
- 線性dp:最長公共子串
- 領釦LintCode演算法問題答案-77. 最長公共子序列演算法
- [Java] 藍橋杯ADV-202 演算法提高 最長公共子序列Java演算法
- 動態規劃之最長公共子序列求解動態規劃
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- 線性dp:最長上升子序列
- 594. 最長和諧子序列
- 死嗑 最長上升子序列(LIS)
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- NlogN 求最長不下降子序列(LIS)
- 動態規劃:最長上升子序列動態規劃