求两个字符串中所拥有的最长子序列。
动态规划的求解步骤:
1.将原问题分解为子问题
2.确定状态。
3.确定一些初始状态的值(边界状态)的值。
4.确定状态转移方程。
public class dp_longestcommonsubsequence {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner cin=new Scanner(System.in);
String s1=cin.nextLine();
String s2=cin.nextLine();
int len1=s1.length();
int len2=s2.length();
int [][] dp=new int [len1+1][len2+1];
for (int i = 0; i <=len2; i++) {
dp[0][i]=0;
}
for (int i = 0; i <=len1; i++) {
dp[i][0]=0;
}
for (int i = 1; i <=len1; i++) {
for (int j = 1; j <= len2; j++) {
if(s1.charAt(i-1)==s2.charAt(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[len1][len2]);
}
}