一个不匹配的子字符串比较

Substring comparision with one mismatch

本文关键字:字符串 比较 不匹配 一个      更新时间:2023-10-16

以下是用于比较字符串a和字符串B与atmost one不匹配的代码即。,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;
}

一个问题是,如果b.length()是偶数,则将a[pos + b.length() / 2]b[b.length() / 2]进行两次比较:一次是在i == mid - 1时,一次是i == mid时。所以类似compare("abcd", 0, "abbd")的东西返回0,因为它计算'c'-与-CCD_ 9差异作为两个单独的失配。

我建议您简单地去掉所有与mid相关的逻辑。它除了使代码大量复杂化之外,没有其他用途。如果你直接从0迭代到b.length() - 1,你会过得更好