题目描述
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:
1. 删除一个字符;
2. 插入一个字符;
3. 将一个字符改为另一个字符。
对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。
输入
第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于200。
输出
只有一个正整数,为最少字符操作次数。
样例输入复制
sfdxbqw
gfdgw
样例输出复制
4
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String A = cin.next();
String B = cin.next();
inIt(A, B);
Dp(A,B);
System.out.println(dp[B.length()][A.length()]);
}
private static void Dp(String A, String B) {
for (int i = 1; i <= B.length(); i++) {
for (int j = 1; j <= A.length(); j++)
dp[i][j] = Math.min(Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1),
(A.charAt(j - 1) == B.charAt(i - 1) ? dp[i - 1][j - 1] : dp[i - 1][j - 1] + 1));
}
}
private static void inIt(String a, String b) {
dp[0][0] = 0;
for (int i = 1; i <= a.length(); i++) dp[0][i] = i;
for (int i = 1; i <= b.length(); i++) dp[i][0] = i;
}
static int[][] dp = new int[200][200];
static Scanner cin = new Scanner(System.in);
}