字符串编辑距离
2013-05-02 09:40
239 查看
题目描述:给定一个源串和目标串,能够对源串进行如下操作:
1.在给定位置上插入一个字符
2.替换任意字符
3.删除任意字符
写一个程序,返回最小操作数,使得对源串进行这些操作后等于目标串,源串和目标串的长度都小于2000。
此题反复出现,最近考的最多的是百度和Google的笔试面试经常考察。
D(n,m)即为字符串X[0...n-1]与Y[0...m-1]之间的最小编辑距离
P.S. 忙实习面试,木有更多解释看一PDF(MinimumEditDistance.pdf)(网上也有)
1.在给定位置上插入一个字符
2.替换任意字符
3.删除任意字符
写一个程序,返回最小操作数,使得对源串进行这些操作后等于目标串,源串和目标串的长度都小于2000。
此题反复出现,最近考的最多的是百度和Google的笔试面试经常考察。
D(n,m)即为字符串X[0...n-1]与Y[0...m-1]之间的最小编辑距离
#include <iostream> #include <assert.h> #include <stdlib.h> int func31(char a[], int n, char b[], int m) { int i, j; int tmp; int *d; assert( a && n>0 && b && m>0); d = new int[(n+1)*(m+1)]; for (i=0; i<=n; i++) { d[m*i + 0] = i; } for (j=0; j<=m; j++) { d[m*0 + j] = j; } for (i=1; i<=n; i++) { for (j=1; j<=m ; j++) { d[m*i + j] = __min( d[m*(i-1)+j]+1 , d[m*i +j-1]+1); if (a[i-1] == b[j-1]) { d[m*i+j] = __min(d[m*i+j], d[m*(i-1)+j-1]); } else { d[m*i+j] = __min(d[m*i+j], d[m*(i-1)+j-1]+2); } } } tmp = d[m*n + m]; delete[] d; return tmp; } int main() { char stra[] = "asfevee"; char strb[] = "safevee"; cout<<func31(stra, strlen(stra), strb, strlen(strb))<<endl; return 0; }
P.S. 忙实习面试,木有更多解释看一PDF(MinimumEditDistance.pdf)(网上也有)
相关文章推荐
- 从字符串编辑距离到字符串对齐
- 求两个字符串的编辑距离
- 1020 字符串编辑距离
- 2014年亚马逊在线笔试题目及解法_9_24(字符串编辑距离升级版)
- 相似字符串(字符串编辑)最短距离(非递归版本)
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- NYOJ 37-回文字符串:编辑距离(动规)
- 最大子数组和、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 【DP总结】【字符串】最短编辑距离
- [置顶] 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离总结
- 字符串的相似度(编辑距离)
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- SPOJ 6219 Edit distance字符串间编辑距离
- 字符串编辑距离
- 字符串编辑距离 经典 dp
- 动规-字符串编辑距离
- 程序员编程艺术第二十八~二十九章:最大连续乘积子串、字符串编辑距离
- 经典算法 | 字符串最小编辑距离分析与证明
- 计算字符串编辑距离
- 字符串的修改(动态规划-最短编辑距离)