算法导论实验(五)源码:
class Solution {
public int longestCommonSubsequence(String text1, String text2) {
int n=text1.length(),m=text2.length();
char[][] mark=new char[n+1][m+1];
int[][] dp=new int[n+1][m+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(text1.charAt(i-1)==text2.charAt(j-1)){
dp[i][j]=dp[i-1][j-1]+1;
mark[i][j]='↖';
}else if(dp[i-1][j]>=dp[i][j-1]){
dp[i][j]=dp[i-1][j];
mark[i][j]='↑';
}else{
dp[i][j]=dp[i][j-1];
mark[i][j]='←';
}
}
printLcs(mark,text1,n,m);
return dp[n][m];
}
public void printLcs(char[][] mark,String text1,int i,int j){
if(i==0||j==0)
return;
if(mark[i][j]=='↖')
{
printLcs(mark,text1,i-1,j-1);
System.out.print(text1.charAt(i-1));
}else if(mark[i][j]=='↑'){
printLcs(mark,text1,i-1,j);
}else{
printLcs(mark,text1,i,j-1);
}
}
}