其实和最长字符串公共序列差不多,关键是要把握好状态的转移。。其他的就没什么了,不解释哈,、、、继续学习中。。。。。
题目描述:设A和B是两个字符串。要求用最少的步骤将字符A转换为字符串B.
步骤包括:
1. 删除一个字符 2. 插入一个字符 3.将一个字符改变为另一个字符。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char A[100], B[100];
int str[100][100];
int m, n;
int min_2(int x, int y)
{
if(x<y)
return x;
return y;
}
int min(int x, int y, int z)
{
return min_2(min_2(x,y),z);
}
int dp(char *a, char *b)
{
int i, j;
m = strlen(a), n = strlen(b);
int M = (m>n? m:n);
memset(str, 0, sizeof(str));
for(i=0; i<=M; i++)
for(j=0; j<=M; j++)
{
if(a[i]==b[j])
str[i+1][j+1] = str[i][j];
else
{
str[i+1][j+1] = min(str[i+1][j],str[i][j+1],str[i][j])+1;
}
}
return str[m+1][m+1];
}
int main()
{
gets(A);
gets(B);
int t = dp(A,B);
printf("%d\n",t);
system("pause");
return 0;
}