您的位置:首页 > 其它

LeetCode - Edit Distance

2015-12-31 15:32 344 查看
题目:

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

思路:

动态规划,dp(i,j)指(i-1)和(j-1)位置需要多少次变换才能相等,若word1[i-1]==word2[j-1],那么dp(i,j)=dp(i-1,j-1),否则的话,则是从dp(i-1,j-1),dp(i,j-1),dp(i-1,j)中选择一个最小值,然后再加1.

package dp;

public class EditDistance {

public int minDistance(String word1, String word2) {
int m = word1.length();
int n = word2.length();
int[][] dp = new int[m + 1][n + 1];
for (int i = 0 ;i <= m ; ++i)
dp[i][0] = i;
for (int i = 0; i <= n; ++i)
dp[0][i] = i;
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1];
} else {
dp[i][j] = 1 + Math.min(Math.min(dp[i - 1][j - 1], dp[i][j - 1]), dp[i - 1][j]);
}
}
}

return dp[m]
;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
EditDistance e = new EditDistance();
System.out.println(e.minDistance("a", "b"));
System.out.println(e.minDistance("abc", "bc"));
System.out.println(e.minDistance("abc", "def"));
System.out.println(e.minDistance("abcdefg", "bcdefgh"));
System.out.println(e.minDistance("abc", "cba"));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: