给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
示例 1:
输入: "sea", "eat"
输出: 2
解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"
说明:
给定单词的长度不超过500。
给定单词中的字符只含有小写字母。
思路:动态规划。
定义dp[i][j]:表示第一个串匹配到位置i同时第二个串匹配到位置j的最小删除数量。
class Solution {
public int minDistance(String word1, String word2) {
int n=word1.length();
int m=word2.length();
if(n==0) return m;
if(m==0) return n;
int[][] dp=new int[n+1][m+1];
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
dp[i][j]=1000;
dp[0][0]=0;
for(int i=1;i<=n;i++) {
dp[i][0]=i;
for(int j=1;j<=m;j++) {
dp[0][j]=Math.min(dp[0][j], j);
if(word1.charAt(i-1)==word2.charAt(j-1))
dp[i][j]=Math.min(dp[i][j], dp[i-1][j-1]);
else
dp[i][j]=Math.min(dp[i][j], Math.min(dp[i][j-1], dp[i-1][j])+1);
}
}
return dp[n][m];
}
}