以下是用于比较字符串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;
}
答案 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
,那么情况会更好。