题目传送门
解题思路:
f[i][j]表示A[1~i]全部转化为B[1~j]的最少次数,如果A[i]==B[j],那么f[i][j]=f[i-1][j-1].
如果不一样,那么f[i][j] = min(f[i-1][j],f[i-1][j-1],f[i][j-1]) + 1.
不要忘了初始化.
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 string l1,l; 7 int f[2001][2001]; 8 9 inline int min(int a,int b) { 10 if(a > b) return b; 11 return a; 12 } 13 14 int main() { 15 cin >> l >> l1; 16 for(int i = 1;i <= l.length(); i++) f[i][0] = i; 17 for(int i = 1;i <= l1.length(); i++) f[0][i] = i; 18 for(int i = 1;i <= l.length(); i++) 19 for(int j = 1;j <= l1.length(); j++) 20 if(l[i-1] == l1[j-1]) 21 f[i][j] = f[i-1][j-1]; 22 else 23 f[i][j] = min(f[i-1][j],min(f[i-1][j-1],f[i][j-1])) + 1; 24 printf("%d",f[l.length()][l1.length()]); 25 return 0; 26 }