字符串编辑距离

字符串编辑距离

是⼀种字符串之间相似度计算的⽅法。给定两个字符串S、T,将S转换成T所需要的删除,插
⼊,替换操作的数量就叫做S到T的编辑路径。⽽最短的编辑路径就叫做字符串S和T的编辑距
离。
举个例⼦:S=“eeba” T="abac" 我们可以按照这样的步骤转变:(1) 将S中的第⼀个e变成a;(2) 删
除S中的第⼆个e;(3)在S中最后添加⼀个c; 那么S到T的编辑路径就等于3。当然,这种变换并不是
唯⼀的,但如果3是所有变换中最⼩值的话。那么我们就可以说S和T的编辑距离等于3了。

动态规划解决编辑距离

动态规划(dynamic programming)是⼀种解决复杂问题最优解的策略。它的基本思路就是:将⼀
个复杂的最优解问题分解成⼀系列较为简单的最优解问题,再将较为简单的的最优解问题进⼀步
分解,直到可以⼀眼看出最优解为⽌。
动态规划算法是解决复杂问题最优解的重要算法。其算法的难度并不在于算法本身的递归难以实
现,⽽主要是编程者对问题本身的认识是否符合动态规划的思想。现在我们就来看看动态规划是
如何解决编辑距离的。

 1 int minDistance(string word1,string word2){
 2     int m=word1.length(),n=word2.length();
 3     int[][] dp=new int[m+1][n+1];
 4     //初始化空字符串情况
 5     for(int i=1;i<=m;i++){
 6         dp[i][0]=i;
 7     }
 8     for(int i=1;i<=n;i++){
 9         dp[0][i]=i;
10     }
11     for(int i=1;i<=m;i++){
12         for(int j=1;j<=n;j++){
13             //增加
14         int insertion =dp[i][j-1]+1;
15         //删除
16         int deletion =dp[i-1][j]+1;
17         //替换
18         int replae =dp[i-1][j-1]+(word1.charAt(i-1) ==word2.charAt(j-1)?0:1;
19         //三者得最小
20         dp[i][j]=min(replace,min(insertion,deletion);
21         }
22     }
23     retrurn dp[m][n];
24 }
转载请说明出处!
原文地址:https://www.cnblogs.com/zengshangzhi/p/9561461.html