算法想法源自《C语言名题精选百则》。
源码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 10
int dealWith(char *s,char *t);
int min3(int a,int b,int c);
int main()
{
char *s = "xbyzek";
char *t = "abcdef";
printf("source:");
puts(s);
printf("target:");
puts(t);
printf("%d\n",dealWith(s,t));
printf("source:");
puts(s);
printf("target:");
puts(t);
return 0;
}
int dealWith(char *s,char *t)
{
int i,j;
int s_len = strlen(s);
int t_len = strlen(t);
int **cost = (int **)malloc(sizeof(int) * max(s_len,t_len) + 1);
cost[0] = (int *)malloc(sizeof(int) * (s_len + 1)* (t_len + 1));
for(i = 1;i <= s_len;i++)
cost[i] = cost[i - 1] + t_len + 1;
cost[0][0] = 0;
for(i = 1;i < s_len + 1;i++)
cost[0][i] = i;
for(i = 1;i < t_len + 1;i++)
cost[i][0] = i;
for(i = 1;i < s_len;i++)
{
for(j = 1;j < t_len;j++)
{
if(s[i] == t[j])
cost[i][j] = cost[i - 1][j - 1];
else
{
cost[i][j] = min3(cost[i - 1][j] + 1,cost[i][j - 1] + 1,cost[i - 1][j - 1] + 2);
}
}
}
return cost[i - 1][j - 1];
}
int min3(int a,int b,int c)
{
int min = a;
if(min > b)
min = b;
else if(min > c)
min = c;
return min;
}