题解 | #编辑距离(一),DP#

编辑距离(一)

http://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str1 string字符串 
     * @param str2 string字符串 
     * @return int整型
     */
    public int editDistance (String str1, String str2) {
        if(str1 == null || str1.length() == 0)
            return str2 == null ? 0 : str2.length() ;
        if(str2 == null || str2.length() == 0) 
            return str1 == null ? 0 : str1.length() ;
        int len1 = str1.length() ;
        int len2 = str2.length() ;
        //f[i][j]表示str1的前i个字符转换为str2的前j个字符的最小编辑距离
        int[][] f = new int[len1 + 1][len2 + 1] ;
        for(int i = 0 ; i <= len1 ; i ++) {
            for(int j = 0 ; j <= len2 ; j ++) {
                if(i == 0) {
                    f[i][j] = j ;
                } else if(j == 0) {
                    f[i][j] = i ;
                } else {
                    //f[i][j-1] + 1表示在str1添加了有一个字符;f[i-1][j] + 1表示str1删除了一个字符
                    f[i][j] = Math.min(f[i][j-1] + 1 , f[i-1][j] + 1) ;
                    //f[i-1][j-1] + 1表示str1修改了一个字符
                    f[i][j] = Math.min(f[i][j] , f[i-1][j-1] + 1) ;
                    //当前字符相等
                    if(str1.charAt(i-1) == str2.charAt(j-1)) {
                        //不做改变,直接把问题交给子问题
                        f[i][j] = Math.min(f[i][j] , f[i-1][j-1]) ;
                    }
                }
            }
        }
        return f[len1][len2] ;
    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务