package com.duoduo.test1;
/**
* 给定两个序列X={ x1,x2,.....xm} Y={y1,y2///yn} 找出两者的一个最长的公共子序列z
* 采用动态规划的思想
* 1 分析最优解的结构特征 假设已经知道了最优解
* 2 建立最优解的递归式
* 3 自底向上求解最优值 并记录最优值和最优策略
* 4 构造最优解
*
* 算法设计: 确定合适的数据结构---》初始化--》循环得到最长长度--》递推来源得到最优解
*/
import java.util.Scanner;
public class Test4_2 {
//已知两个字符串 求解公共最长子序列
static String s1;
static String s2;
public static void main(String [] args) {
Scanner sc=new Scanner(System.in);
System.out.print("输入第一个字符串S1:");
s1= sc.next();
System.out.print("输入第二个字符串S2:");
s2=sc.next();
int len1=s1.length(); //计算两个字符串的长度
int len2=s2.length();
int [][] c=new int[len1+1][len2+1]; //记录最长公共子序列长度
int [][] b=new int[len1+1][len2+1]; //记录最长子序列的来源
/*初始化 第一行第一列均初始化为0*/
for(int i=0;i<=len1;i++)
c[i][0]=0;
for(int j=0;j<=len2;j+
动态规划---最长的公共子序列java版本
最新推荐文章于 2023-11-29 14:46:53 发布