最长公共字串 记录最长字串的结果

来源:互联网 发布:linux 系统下载 编辑:程序博客网 时间:2024/05/24 01:00

沿着结果网斜上方打印然后逆序就可以。


代码:


package codes;public class LongestCommonSubMemo {public static void main(String[] args) {String res = new LongestCommonSubMemo().lonestCommonSub("tofooodie", "toooday");//int max =  new LongestCommonSub().Max(res);System.out.println(res);//System.out.println(new LongestCommonSub().recursiveCommonLongestsSub("tofoodie", "tooday"));}//不带 最长记录的public String lonestCommonSub( String str1, String str2){String longestSub ="";int [][] res = new int [str1.length()][str2.length()];//初始化第一行,第一列for( int i=0;i<str1.length();i++){if(str1.charAt(i) == str2.charAt(0)){res[i][0] = 1;}}for( int i=0;i<str2.length();i++){if(str1.charAt(0) == str2.charAt(i)){res[0][i] = 1;}}for( int i = 1 ;i< str1.length();i++){for(int j = 1; j< str2.length();j++){if( str1.charAt(i) == str2.charAt(j)){res[i][j] = res[i-1][j-1]+1;}}}//print arrayfor( int i=0;i< res.length;i++){for( int j =0; j< res[0].length ; j++){System.out.print(res[i][j]+" ");}System.out.println();}// 已经获得resint max = 0;int row = 0;int col = 0;for(int i = 0;i<res.length;i++){for(int j = 0;j<res[0].length;j++){if(res[i][j]> max){max = res[i][j];row = i;col = j;}}}while( row>0 && col>0){longestSub += str1.charAt(row);row--;col--;}StringBuffer sb = new StringBuffer(longestSub);longestSub = sb.reverse().toString();return longestSub;}}


0 0
原创粉丝点击