import java.util.*;
/**
* NC196 编辑距离(一)
* @author d3y1
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str1 string字符串
* @param str2 string字符串
* @return int整型
*/
public int editDistance (String str1, String str2) {
return solution(str1, str2);
}
/**
* 动态规划: dp[i][j]表示字符串str1的前i个字符与字符串str2的前j个字符相同所需要的最少操作数
* @param str1
* @param str2
*/
private static int solution(String str1, String str2){
int len1 = str1.length();
int len2 = str2.length();
int[][] dp = new int[len1+1][len2+1];
// 初始化
for(int i=0; i<=len1; i++){
dp[i][0] = i;
}
for(int j=0; j<=len2; j++){
dp[0][j] = j;
}
for(int i=1; i<=len1; i++){
for(int j=1; j<=len2; j++){
// case 1
if(str1.charAt(i-1) == str2.charAt(j-1)){
dp[i][j] = dp[i-1][j-1];
}
// case 2
else{
dp[i][j] = Math.min(Math.min(dp[i-1][j]+1, dp[i][j-1]+1), dp[i-1][j-1]+1);
}
}
}
return dp[len1][len2];
}
}