子串比较与一个不匹配

时间:2012-02-23 22:00:55

标签: c++ string similarity

以下是用于比较字符串A和字符串B与最多一个不匹配的代码 即, ABC与ABX或AXC或XBC相同,但与AXZ不同

我确实检查了几个案例,但网站上说它提供了错误的答案。有人可以帮助找出这段代码失败的地方吗? 此外,如果有人能为同样的问题提供更好的算法,我会很高兴。

TY

int compare(string a,  int pos, string b)   {
int count = 0;
int length = b.length()-1;
int mid = b.length() /2;

if(pos+length >= a.length())
    return 0;

for(int i=0,j=pos;i<=mid;i++,j++)   {       
    if(i == mid)    {
        if(a[j] != b[i])
            count ++;
    }
    else    {
        if(a[j] != b[i])
            count ++;
        if(a[pos+length - i] != b[length -i]) 
            count ++;
    }
    if(count >= 2) return 0;
}
return 1;
}

1 个答案:

答案 0 :(得分:1)

一个问题是如果b.length()是偶数,那么您将a[pos + b.length() / 2]b[b.length() / 2] 进行两次比较:一次i == mid - 1,一次i == mid。因此compare("abcd", 0, "abbd")之类的内容会返回0,因为它将'c' - vs .- 'b'差异视为两个不同的不匹配。

我建议您删除与mid相关的所有逻辑。除了使代码大规模复杂化之外,它没有用处。如果您从0直接迭代到b.length() - 1,那么情况会更好。