状态转移方程:
if(!&&!j)dp[i][j]=0;
else if(!i&&j>0)dp[i][j]=j;
else if(i>0&&!j)dp[i][j]=i;
else if(i>0&&j>0)dp[i][j]=min(dp[i-1][j]+1,dp[i,j-1]+1,dp[i-1][j-1]+f(i,j))
代码:
#include <iostream>
using namespace std;
int min(int a, int b) {
return a < b ? a : b;
}
int f(string str1, string str2) {
int m = str1.size();
int n = str2.size();
int dp[100][100];
for(int i = 0 ; i < m + 1 ; i++) {
dp[i][0] = i;
}
for(int i = 0 ; i < n + 1; i++) {
dp[0][i] = i;
}
for(int i = 1 ; i < m + 1 ; i++) {
for(int j = 1 ; j< n + 1; j++) {
int d;
int temp = min(dp[i-1][j] + 1, dp[i][j-1] + 1);
if(str1[i-1] == str2[j-1]) {
d = 0 ;
} else {
d = 1 ;
}
dp[i][j] = min(temp, dp[i-1][j-1] + d);
}
}
int dis = dp[m][n];
return dis;
}
int main(void) {
string str1 ;
string str2 ;
cin>>str1>>str2;
int dis = f(str1, str2);
cout << dis << endl;
return 0;
}
学弟学妹们扫码加群哦