去爱奇艺面实习岗的时候问的这个
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
考虑如下几种情况:
1. worda
wordb
2. word
worde
3. worde
word
source[1:s]源字符串可以通过3种途径变为target[1:t]目标字符串
1.将1:s-1 转换为 1:t-1 将s转换为t (相同代价为0 不同为1)
2.将1:s转化为 1:t-1 插入t
3.将1:s-1转化为1:t 删除s
1.将1:s-1 转换为 1:t-1 将s转换为t (相同代价为0 不同为1)
2.将1:s转化为 1:t-1 插入t
3.将1:s-1转化为1:t 删除s
public int minDistance(String word1, String word2) {
int[][] dp = new int[word1.length()+1][word2.length()+1];
for(int i = 0;i <= word1.length();i++) dp[i][0] = i;
for(int j = 0;j <= word2.length();j++) dp[0][j] = j;
for(int i = 1;i <= word1.length();i++){
for(int j = 1;j <= word2.length();j++){
if(word1.charAt(i-1) == word2.charAt(j-1))
dp[i][j] = dp[i-1][j-1];
else
dp[i][j] = dp[i-1][j-1] + 1;
dp[i][j] = Math.min(dp[i][j], Math.min(dp[i-1][j]+1, dp[i][j-1]+1));
}
}
return dp[word1.length()][word2.length()];
}