题目描述:
给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
提示:
1.给定单词的长度不超过。
2.给定单词中的字符只含有小写字母。
动态规划(最长上升子序列)
时间复杂度:
dp[i][j]表示word1的前i个字母与word2中的前j个字母相同的最小步数- 转移时,若第i个字母与第j个字母相同,那么不需要进行删除,
dp[i][j]=dp[i-1][j-1] - 不相同就比较状态转移到
dp[i-1][j]和dp[i][j-1]的步数那个小 - 初始化
dp[i][0] = i,dp[0][j] = [j],最终答案是dp[n][m]
代码:
class Solution {
public int minDistance(String word1, String word2) {
int n = word1.length(),m = word2.length();
int[][] dp = new int[n+10][m+10];
for(int i = 1; i <= n; i ++) dp[i][0] = i;
for(int j = 1; j <= m; j ++) dp[0][j] = j;
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++){
if(word1.charAt(i-1) == word2.charAt(j-1))
dp[i][j] = dp[i-1][j-1];
else
dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+1;
}
}
return dp[n][m];
}
}
```