翩然游刃

记录技术上的点滴

字符串编修

算法想法源自《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;
}


阅读更多
文章标签: 算法 语言 c
上一篇大数相乘
下一篇真心不知道哪里错了 。。。
想对作者说点什么? 我来说一句

PHOTOSHOP相片编修100技2

2013年05月27日 6.56MB 下载

PHOTOSHOP相片编修100技4

2013年05月27日 6.65MB 下载

PHOTOSHOP相片编修100技9

2013年05月27日 6.2MB 下载

PHOTOSHOP相片编修100技1

2013年05月27日 6.57MB 下载

PHOTOSHOP相片编修100技8

2013年05月27日 6.42MB 下载

PHOTOSHOP相片编修100技3

2013年05月27日 6.56MB 下载

PHOTOSHOP相片编修100技6

2013年05月27日 6.48MB 下载

没有更多推荐了,返回首页

关闭
关闭