Leetcode 72. Edit Distance
题目链接: Edit Distance
难度:Hard
题目大意:
给出两个字符串s1和s2,每次操作可以对s1删除、替代或增加一个字符,求最少经过多少次操作,可以使得s1与s2相等。
思路:
动态规划。
代码
class Solution {
public int minDistance(String s1, String s2) {
int m=s1.length(),n=s2.length();
int[][] dp=new int [m+1][n+1];
//dp[i][j]表示s1从头取到第i个字符,s2从头取到第j个字符的答案
for(int i=0;i<=m;i++){
for(int j=0;j<=n;j++){
if(i==0||j==0){//有一个字符串为空的情况
dp[i][j]=i+j;
continue;
}
if(s1.charAt(i-1)==s2.charAt(j-1)){
dp[i][j]=dp[i-1][j-1];
}
else{
//情况1,把s1的第i个字符变为s2的第j个字符
int replace=dp[i-1][j-1]+1;
//情况2,把s1的第i个字符删除
int del=dp[i-1][j]+1;
//情况3,在s1的第i个字符后增添s2的第j个字符
int add=dp[i][j-1]+1;
dp[i][j]=Math.min(replace,Math.min(del,add));
}
}
}
return dp[m][n];
}
}