72. 编辑距离
解题思路
- dp(i,j)表示当前两个字符串指针i,j处所需要的最小编辑距离
- 如果s1[i]== s2[j] 那么不需要编辑 直接移动到dp(i - 1,j - 1)
- 如果当前两个指针指向的字符不相等,判断删除,插入,替换三种操作的最小值
class Solution {
int[][] memo;
public int minDistance(String word1, String word2) {
int m = word1.length();
int n = word2.length();
memo = new int[m][n];
for(int[] row:memo){
Arrays.fill(row,-1);
}
return dp(word1,word2,m - 1,n - 1);
}
int dp(String s1,String s2,int i,int j){
if(i == -1){
return j + 1;
}
if(j == -1){
return i + 1;
}
if(memo[i][j] != -1){
return memo[i][j];
}
if(s1.charAt(i) == s2.charAt(j)){
memo[i][j] = dp(s1,s2,i - 1,j - 1);
}else{
memo[i][j] = Math.min(
dp(s1,s2,i,j - 1) + 1,
Math.min(dp(s1,s2,i - 1,j) + 1,
dp(s1,s2,i - 1,j - 1) + 1)
);
}
return memo[i][j];
}
}