lintcode-medium-Edit Distance
2016-03-20 13:44
330 查看
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:
Insert a character
Delete a character
Replace a character
Given word1 =
动态规划,用一个二维int数组记录word1中前i个字符到word2中前j个字符的edit distance:
如果word1中的第i-1个字符和word2中第j-1个字符相等,说明这个edit distance和word1前i-1个字符到word2前j-1个字符的edit distance相等
如果这两个字符不相等,这时有三种选择:
1. 修改:把word1最后一个字符改为word2最后一个字符,edit distance为dp[i - 1][j - 1] + 1
2. word1增加一个字符:在word1前i-1个字符中加入一个字符,edit distance为dp[i - 1][j] + 1
3. word2增加一个字符:在word2前j-1个字符中加入一个字符,edit distance为dp[i][j - 1] + 1
选取其中最小的一个作为dp[i][j]
You have the following 3 operations permitted on a word:
Insert a character
Delete a character
Replace a character
Given word1 =
"mart"and word2 =
"karma", return
3.
动态规划,用一个二维int数组记录word1中前i个字符到word2中前j个字符的edit distance:
如果word1中的第i-1个字符和word2中第j-1个字符相等,说明这个edit distance和word1前i-1个字符到word2前j-1个字符的edit distance相等
如果这两个字符不相等,这时有三种选择:
1. 修改:把word1最后一个字符改为word2最后一个字符,edit distance为dp[i - 1][j - 1] + 1
2. word1增加一个字符:在word1前i-1个字符中加入一个字符,edit distance为dp[i - 1][j] + 1
3. word2增加一个字符:在word2前j-1个字符中加入一个字符,edit distance为dp[i][j - 1] + 1
选取其中最小的一个作为dp[i][j]
public class Solution { /** * @param word1 & word2: Two string. * @return: The minimum number of steps. */ public int minDistance(String word1, String word2) { // write your code here if(word1 == null || word1.length() == 0) return word2.length(); if(word2 == null || word2.length() == 0) return word1.length(); int m = word1.length(); int n = word2.length(); int[][] dp = new int[m + 1][n + 1]; for(int i = 0; i <= m; i++) dp[i][0] = i; for(int i = 0; i <= n; i++) dp[0][i] = i; for(int i = 1; i <= m; i++){ char c1 = word1.charAt(i - 1); for(int j = 1; j <= n; j++){ char c2 = word2.charAt(j - 1); if(c1 == c2){ dp[i][j] = dp[i - 1][j - 1]; } else{ dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1; } } } return dp[m] ; } }
相关文章推荐
- 安卓中转场动画小demo
- Shell printf 命令
- 灰度图像直方图变换的一些代码
- leetcode:Palindrome Partitioning II
- 灰度图像直方图变换的一些代码
- IIS 应用程序池.NET40 重新注册
- Shell printf 命令
- Spring框架基础示例
- 如何制作牛肉虾
- 闭关日记 Day07
- Hadoop伪分布式环境搭建
- 51nod贪心算法入门-----独木舟问题
- 5-19 支票面额 (15分)C语言
- java第八节-多态,抽象类,接口
- Java基础之二:Java语法基础
- Qt4.8.5+VS2010+Addin配置
- vector族函数
- 复利计算--web版--总结--软件工程
- 《Linux内核分析》课程第四周学习总结
- 此博客内博文均转自我个人的博客网站!