题意:给出两个字符串s1,s2, 问从s2变为s1需要几步操作。只支持3种操作:增加一个字符,删除一个字符,修改字符
思路:用f(i,j)表示字符串s1(0..i)和s2(0..j)转换需要的操作步数,
则有增加一个字符f(i,j) = f(i-1,j) + 1
删除一个字符f(i,j)=f(i, j-1) + 1
修改字符时,如果s1(i)==s2(j),有f(i,j)=f(i-1,j-1) ,否则f(i,j)=f(i-1,j-1)+1
具体代码如下:
public class Solution {
public int minDistance(String word1, String word2) {
int len1 = word1.length();
int len2 = word2.length();
int[][] dp = new int[len1 + 1][len2 + 1];
for (int i = 1; i <= len2; i++)
{
dp[0][i] = i;
}
for (int i = 1; i <= len1; i++)
{
dp[i][0] = i;
}
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
int val = word1.charAt(i - 1) == word2.charAt(j - 1) ? 0 : 1;
dp[i][j] = Math.min(dp[i - 1][j] + 1, Math.min(dp[i][j - 1] + 1, dp[i - 1][j - 1] + val));
}
}
return dp[len1][len2];
}
}