import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
edit(in.nextLine(), in.nextLine());
}
}
//编辑操作包括:删除、插入、替换
private static void edit(String a, String b) {
//dp数组的索引对应字符串的长度
int[][] dp = new int[a.length()+1][b.length()+1];
//首行首列的编辑距离即为字符的长度
for(int i=1; i<=a.length(); i++) {
dp[i][0] = i;
}
for(int i=1; i<=b.length(); i++) {
dp[0][i] = i;
}
/**
对于dp[i][j]的值:
字符相同时:编辑距离一定等于dp[i-1][j-1]
字符不同时:
要么替换(dp[i-1][j-1] + 1)
要么删除a的(dp[i-1][j] + 1)
要么删除b的(dp[i][j-1] + 1)
*/
for(int i=1; i<=a.length(); i++) {
for(int j=1; j<=b.length(); j++) {
if(a.charAt(i-1)==b.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;
}
}
}
System.out.println(dp[a.length()][b.length()]);
}
}