leetcode Edit Distance
来源:互联网 发布:windows中国官方网 编辑:程序博客网 时间:2024/06/07 15:14
Edit Distance 原题地址:
https://oj.leetcode.com/problems/edit-distance/
The edit distance of two strings, s1 and s2, is defined as the minimum number of point mutations required to change s1 into s2, where a point mutation is one of:
- change a letter,
- insert a letter or
- delete a letter
计算两个字符串s1+ch1, s2+ch2的编辑距离有这样的性质:
1. d(s1,””) = d(“”,s1) = |s1| d(“ch1”,”ch2”) = ch1 == ch2 ? 0 : 1;
2. d(s1+ch1,s2+ch2) = min(d(s1,s2)+ ch1==ch2 ? 0 : 1 , d(s1+ch1,s2), d(s1,s2+ch2) );
第一个性质是显然的。
第二个性质: 由于我们定义的三个操作来作为编辑距离的一种衡量方法。
于是对ch1,ch2可能的操作只有
1. 把ch1变成ch2
2. s1+ch1后删除ch1 d = (1+d(s1,s2+ch2))
3. s1+ch1后插入ch2 d = (1 + d(s1+ch1,s2))
对于2和3的操作可以等价于:
_2. s2+ch2后添加ch1 d=(1+d(s1,s2+ch2))
_3. s2+ch2后删除ch2 d=(1+d(s1+ch1,s2))
因此可以得到计算编辑距离的性质2。
public class Solution { public int minDistance(String word1, String word2) { int len1 = word1.length();int len2 = word2.length();if (len1 == 0)return len2;if (len2 == 0)return len1;int[][] dist = new int[len1+1][len2+1];for (int i = 0; i <= len1; i++)dist[i][0] = i;for (int j = 0; j <= len2; j++)dist[0][j] = j;for (int i = 1; i <= len1; i++)for (int j = 1; j <= len2; j++) {if (word1.charAt(i-1) == word2.charAt(j-1))dist[i][j] = dist[i-1][j-1];elsedist[i][j] = Math.min(Math.min(dist[i-1][j-1] + 1, dist[i-1][j] + 1), dist[i][j-1] + 1);}return dist[len1][len2]; }}
- LeetCode: Edit Distance
- LeetCode Edit Distance
- LeetCode: Edit Distance
- [Leetcode] Edit Distance
- leetcode 19: Edit Distance
- [LeetCode] Edit Distance
- [Leetcode] Edit Distance
- LeetCode Edit Distance
- [LeetCode] Edit Distance
- [LeetCode]Edit Distance
- Leetcode: Edit Distance
- [leetcode]Edit Distance
- LeetCode-Edit Distance
- [leetcode] Edit Distance
- LeetCode - Edit Distance
- leetcode之Edit Distance
- leetcode edit distance
- 【leetcode】Edit Distance
- 第十一周项目一(3)
- c++ getline()和istringstream
- 11周项目(函数输*号)
- HTML5开发手机项目-个人总结
- Linux SVN 服务器配置和客户端使用
- leetcode Edit Distance
- GDI+学习及代码总结之------图像的基本处理
- centos上安装phpstorm
- dhtmlx技术使用总结与介绍中文手册
- 判断数据库字段是否为空
- Php 生成验证码(实用)
- Valid Sudoku
- 同步更新缓存数据
- 【OpenGL】Shader实例分析(九)- AngryBots中的主角受伤特效