LCS最长公共子序列
生活随笔
收集整理的這篇文章主要介紹了
LCS最长公共子序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
例如 b c d d e和 a c e e d e的公共子串為c d e。
如果使用暴力,復雜度太高會直接超時。就需要使用動態規劃
- dp[i][j]表示a串第i個結尾,b串第j個結尾的最長公共子串的數量。
- 首先分析i,j的情況
這樣代碼就好些了,附上Java代碼(數組申請大以為從1開始操作)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer;public class testD {public static void main(String[] args) throws IOException {// TODO 自動生成的方法存根StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));while(in.nextToken()!=StreamTokenizer.TT_EOF){String s1=in.sval;in.nextToken();String s2=in.sval;char a1[]=s1.toCharArray();char a2[]=s2.toCharArray(); // int index1=0;int index2=0;int dp[][]=new int[s1.length()+1][s2.length()+1];for(int i=1;i<s1.length()+1;i++){for(int j=1;j<s2.length()+1;j++){if(a1[i-1]==a2[j-1]){dp[i][j]=dp[i-1][j-1]+1;}elsedp[i][j]=max(dp[i][j-1],dp[i-1][j]);}}out.println(dp[a1.length][a2.length]);out.flush(); }}private static int max(int i, int j) {// TODO 自動生成的方法存根return i>j?i:j;} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的LCS最长公共子序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杭电2669拓展欧几里得
- 下一篇: pat1033汽车加油问题(Java贪心