Edit Distance
来源:互联网 发布:云熙拆单软件正版价格 编辑:程序博客网 时间:2024/05/16 06:18
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
思路:这个题目和http://blog.csdn.net/lmy690858904/article/details/47971639其实是大致一样的,只不过这个题目从word1变换为word2有三种操作方法(插入,删除,替换),而distinct subsequences中,从字符串S变换成字符串T只能删除字符。
同样,我们用d[i][j]表示word1中前i个字符变换为word2中前j个字符所用的最小步数。
计算d[i][j]的值,为以下三种情况中最小的一个值
d[i-1][j]+1 表示word1中的第i个位置删除第i个字符,因为S中前i-1个字符已经可以变换成T中的前j个字符了
d[i][j-1]+1 表示在word1中第i个位置插入T中的第j个字符
d[i-1][j-1]+isreplace ,如果word1[i]==word2[j] ,isreplace=0,表示不用进行替换操作。否则word1[i]!=word[j], isreplace=1,表示需要进行替换操作。
那么 d[i][j]=Math.min(Math.min(d[i-1][j],d[i][j-1])+1,d[i-1][j-1]+isreplace);
注意:当d[i][j]中i表示已经遍历到S中的第i个字符了,j表示已经遍历到T中的第j个字符了的时候,此时计算isreplace的时候,因为word1和word2的下标都是从0开始的,所以有 isreplace=(word1.charAt(i-1)==word2.charAt(j-1) ? 0 : 1);
public class Solution { public int minDistance(String word1, String word2) { int m=word1.length(); int n=word2.length(); int isreplace=0; int[][] d=new int[m+1][n+1]; d[0][0]=0; for(int i=1;i<=m;i++) d[i][0]=i; for(int j=1;j<=n;j++) d[0][j]=j; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { isreplace=(word1.charAt(i-1)==word2.charAt(j-1) ? 0 : 1); d[i][j]=Math.min(Math.min(d[i-1][j],d[i][j-1])+1,d[i-1][j-1]+isreplace); } } return d[m][n]; }}
- edit distance
- Edit Distance
- edit distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- CDH 维护日志,集群查看
- Android-Sax解析与生成xml数据
- QWaitCondition解决打印日志卡的问题
- block回调的一点个人理解
- 给中国学生的第三封信:成功、自信、快乐
- Edit Distance
- 软工视频总结Part Three
- Objective-C中的浅拷贝和深拷贝
- SourceInsight 的一些小技巧
- android 学习笔记 将数据存储到SharedPreferences中 并且读取数据
- 原码反码补码 详解
- aix5.3和aix6.1的VMO参数对比
- Android中的动画,逐帧动画,补间动画
- ocr_wafer_semi_font.hdev圆晶上semi字符提取 相关例程学习