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]; } }