给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。
你可以对一个单词执行以下3种操作:
a)在单词中插入一个字符
b)删除单词中的一个字符
c)替换单词中的一个字符
思路:画一个二维数组状态,表示i个word的字符变为j个需要多少步,
字符相等的时候,n个字符变为m个字符需要的步数=(n-1个字符变为m-1个字符需要的步数 )
不相等的时候,n个字符变为m个字符需要的步数=(n-1个字符变为m个字符 和 n个字符变为m-1个字符 和 n-1个字符变为m-1个字符需要的步数) 中的最小值 + 1
package main
/**
*
* @param word1 string字符串
* @param word2 string字符串
* @return int整型
*/
func minDistance( word1 string , word2 string ) int {
// write code here
distance := make(map[int]map[int]int)
tmp := make(map[int]int)
tmp[0] = 0
distance[0] = tmp
for i := 0; i < len(word1); i++ {
tmp := make(map[int]int)
tmp[0] = i + 1
distance[i+1] = tmp
}
for j := 0; j < len(word2); j++ {
distance[0][j+1] = j + 1
}
for i := 0; i < len(word1); i++ {
for j := 0; j < len(word2); j++ {
if word1[i] == word2[j] {
distance[i+1][j+1] = distance[i][j]
} else {
min := distance[i][j]
if min > distance[i+1][j] {
min = distance[i+1][j]
}
if min > distance[i][j+1] {
min = distance[i][j+1]
}
distance[i+1][j+1] = min + 1
}
}
}
return distance[len(word1)][len(word2)]
}