下面是比较字符串 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/