<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str1 string字符串
* @param str2 string字符串
* @return int整型
*/
function editDistance( $str1 , $str2 )
{
// write code here
$len1 = strlen($str1);
$len2 = strlen($str2);
$dp[0][0] = 0;
for($i = 1;$i<=$len1;$i++){
$dp[$i][0] = $dp[$i-1][0]+1;
}
for($i = 1;$i<=$len2;$i++){
$dp[0][$i] = $dp[0][$i-1]+1;
}
for($i = 1;$i<=$len1;$i++){
for($j = 1;$j<=$len2;$j++){
if($str1[$i-1] == $str2[$j-1]){
$dp[$i][$j] = $dp[$i-1][$j-1];
}else{
$dp[$i][$j] = min(min($dp[$i-1][$j-1],$dp[$i-1][$j]),$dp[$i][$j-1])+1;
}
}
}
return $dp[$len1][$len2];
}
解题思路
我们这里其实也是这么几种情况
dp[i][j]dp[i][j]dp[i][j]表示为从str1的第i位变化位str2的第j位str1的第i位变化位str2的第j位str1的第i位变化位str2的第j位次数
-
str1第i位和str2第j位一样str1第i位和str2第j位一样str1第i位和str2第j位一样 dp[i][j]=dp[i−1][j−1]dp[i][j] = dp[i - 1][j - 1]dp[i][j]=dp[i−1][j−1]
-
str1第i位和str2第j位不一样str1第i位和str2第j位不一样str1第i位和str2第j位不一样 dp[i][j]=min(dp[i−1][j−1],dp[i−1][j],dp[i][j−1])+1dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1dp[i][j]=min(dp[i−1][j−1],dp[i−1][j],dp[i][j−1])+1
这个就是我们的状态转移方程