c++ - 有一个不匹配的子串比较

标签 c++ string similarity

下面是比较字符串 A 和字符串 B 最多有一个不匹配的代码 IE。, ABC 与 ABX 或 AXC 或 XBC 相同,但与 AXZ 不同

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

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'-vs.- 'b' 作为两个单独的不匹配的差异。

我建议您简单地去掉与mid 相关的所有逻辑。除了使您的代码非常复杂之外,它没有任何用处。如果您直接从 0 迭代到 b.length() - 1,您的情况会好得多。

关于c++ - 有一个不匹配的子串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9422051/

相关文章:

C++ 设置/获取方法同步

C++ std::thread 无效使用 void 表达式

java - 在这种情况下,字符串构造函数 - String(String original) 中的 'size > originalValue.length' 会是 0x104567910 吗?

algorithm - 比较Canny算法的轮廓结果和相似度

similarity - PIL 逊相关相似度和调整余弦相似度有什么区别?

c++ - C++ 中的 DBL_MAX 是什么?

c++ - 对于 C++ 开发人员,是否值得从 VS2005 切换到 VS2008?

java - Split 方法忽略末尾的逗号

c - 试图用两个定界符分开但它不起作用 - C

SQL Server记录字符串匹配后的链接