描述
给定两个字符串 str1 和 str2 ,请你算出将 str1 转为 str2 的最少操作数。
你可以对字符串进行3种操作:
1.插入一个字符
2.删除一个字符
3.修改一个字符。
字符串长度满足 ,保证字符串中只出现小写英文字母。
package main
// import "fmt"
func min(a ...int) int {
v:= a[0]
for _,t := range a {
if v>t {
v = t
}
}
return v
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str1 string字符串
* @param str2 string字符串
* @return int整型
*/
func editDistance( str1 string , str2 string ) int {
// write code here
var dp = make([][]int,len(str1)+1)
for i:=0;i<len(dp);i++ {
dp[i] = make([]int,len(str2)+1)
}
for i:=0;i<=len(str1);i++ {
dp[i][0] = i
}
for j:=0;j<=len(str2);j++{
dp[0][j] = j
}
for i:=1;i<=len(str1);i++ {
for j:=1;j<=len(str2);j++{
if str1[i-1] == str2[j-1] {
//上一个状态 一定是最小的
dp[i][j] =dp[i-1][j-1]
}else {
//对比旁边的状态,取出最小 { 插入,删除, 修改} + 操作的代价
dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1
}
}
}
return dp[len(str1)][len(str2)]
}