1. 插入一个字符
2. 删除一个字符
3. 更改一个字符
请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2
数据范围:输入字符串的长度满足 
import java.util.Scanner;
/**
* @Author: coderjjp
* @Date: 2020-05-09 21:17
* @Description:
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
int ans = recursion(s1, s2, s1.length(), s2.length());
System.out.println(ans);
}
private static int recursion(String s1, String s2, int i, int j) {
//由s1 --> s2
if (j == 0) {
return i;
} else if (i == 0) {
return j;
} else if (s1.charAt(i-1) == s2.charAt(j - 1)) {//跳过
return recursion(s1, s2, i - 1, j - 1);
} else {
int m1 = recursion(s1, s2, i - 1, j) + 1;//删掉一个字符
int m2 = recursion(s1, s2, i, j - 1) + 1;//增加一个字符
int m3 = recursion(s1, s2, i - 1, j - 1) + 1;//替换一个字符
return Math.min(Math.min(m1, m2), m3);
}
}
} 2.动态规划解法 import java.util.Scanner;
/**
* @Author: coderjjp
* @Date: 2020-05-09 21:17
* @Description:
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
int ans = dynamicPlanning(s1, s2);
System.out.println(ans);
}
private static int dynamicPlanning(String s1, String s2){
int len1 = s1.length();
int len2 = s2.length();
int dp[][] = new int[len1+1][len2+1];
for (int j = 1; j <= len2; j++)
dp[0][j] = j;
for (int i = 1; i <= len1; i++)
dp[i][0] = i;
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];
else
dp[i][j] = Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
}
return dp[len1][len2];
}
}