编辑距离1111

<?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位次数

  1. 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]

  2. 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

这个就是我们的状态转移方程

猜你喜欢

转载自blog.csdn.net/qq_40192867/article/details/123179322