3.3 计算字符串的相似度

来源:互联网 发布:项目数据分析师认证 编辑:程序博客网 时间:2024/06/06 04:16

问题:

给定任意两个字符串,修改、增加、删除方式让他们变得相同,最少步骤。


解决:

递归解决,一步操作后,将下面三种情况变成相同字符串

1. A[2, ... , end] 和 B[1, ... , end]

2. A[1, ... , end] 和 B[2, ... , end]

3. A[2, ... , end] 和 B[2, ... , end]

代码如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>int min(int t1, int t2, int t3){    int temp = 0;    if (t1 > t2)        temp = t2;    else        temp = t1;    if(temp > t3)        return t3;    else        return temp;}int calculateStrDistance(char* strA, int pABegin, int pAEnd, char* strB, int pBBegin, int pBEnd){    if(pABegin > pAEnd)    {        if(pBBegin > pBEnd)            return 0;        else            return pBEnd - pBBegin + 1;    }    if(pBBegin > pBEnd)    {        if(pABegin > pAEnd)            return 0;        else            return pAEnd - pABegin + 1;    }    if(strA[pABegin] == strB[pBBegin])    {        return calculateStrDistance(strA, pABegin + 1, pAEnd, strB, pBBegin + 1, pBEnd);    }    else    {        int t1 = calculateStrDistance(strA, pABegin, pAEnd, strB, pBBegin + 1, pBEnd);        int t2 = calculateStrDistance(strA, pABegin + 1, pAEnd, strB, pBBegin, pBEnd);        int t3 = calculateStrDistance(strA, pABegin + 1, pAEnd, strB, pBBegin + 1, pBEnd);        return min(t1, t2, t3) + 1;    }}int main(){    char* strA = "abcdef";    char* strB = "abcdefg";    int pABegin = 0;    int pAEnd = 5;    int pBBegin = 0;    int pBEnd = 6;    printf("The distance is %d\n", calculateStrDistance(strA, pABegin, pAEnd, strB, pBBegin, pBEnd));    return 0;}


原创粉丝点击