动态规划,设dp[i][j]表示a字符串的子串a[0:i]与b字符串的子串b[0:j]之间的距离,则:
1.如果a[i]==b[j],那么本次不需要做任何改动,dp[i][j]=dp[i-1][j-1]
2.如果a[i]!=b[j],那么有三种改动方式:
①先从子串a[0:i]尾部删去字符a[i]变为a[0:i-1],然后将其转变为b[0:j],距离为1+dp[i-1][j]
②先将子串a[0:i]转变为b[0:j-1],然后在尾部新增字符b[j],距离为dp[i][j-1]+1
③先将子串a[0:i-1]转变为b[0:j-1],然后将尾部字符a[i]修改为b[j],距离为dp[i-1][j-1]+1
需要从三种方式中找出距离最小的那一种。写成状态转移方程就是:dp[i][j]=min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
1.如果a[i]==b[j],那么本次不需要做任何改动,dp[i][j]=dp[i-1][j-1]
2.如果a[i]!=b[j],那么有三种改动方式:
①先从子串a[0:i]尾部删去字符a[i]变为a[0:i-1],然后将其转变为b[0:j],距离为1+dp[i-1][j]
②先将子串a[0:i]转变为b[0:j-1],然后在尾部新增字符b[j],距离为dp[i][j-1]+1
③先将子串a[0:i-1]转变为b[0:j-1],然后将尾部字符a[i]修改为b[j],距离为dp[i-1][j-1]+1
需要从三种方式中找出距离最小的那一种。写成状态转移方程就是:dp[i][j]=min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1