总结:
1.由于当截取字符串a从0到i,截取字符串b从0到j,此时两截取的字符串的最长公共子序列与前面的状态有关,并可写出状态转移方程,故使用动态规划可以解决。关键是想出状态转移方程。
dp[i][j]= dp[i−1][j−1]+1, 当text1[i−1]=text2[j−1]时
max(dp[i−1][j],dp[i][j−1]),当text1[i−1]不等于text2[j−1]
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] num = sc.nextLine().split(" ");
int m = Integer.parseInt(num[0]);
int n = Integer.parseInt(num[1]);
String text1 = sc.nextLine();
String text2 = sc.nextLine();
int[][] dp = new int[m+1][n+1];
for(int i=0;i<=m;i++){
for(int j=0;j<=n;j++){
if(i==0||j==0)
dp[i][j]=0;
else{
if(text1.charAt(i-1)==text2.charAt(j-1))//由于dp数组i=0j=0空闲,数组dp[i][j]就对应字符串的i-1,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]);
}
}
}
System.out.println(dp[m][n]);
}
}
京公网安备 11010502036488号