[英]Algorithm for string with one mismatch
有人可能建议一个更好的方法来进行两个字符串之间的字符串比较,最多只有一个不匹配。
例:
上面的输出是“A”中abc的子串匹配的位置
我尝试了两个for循环的基本方法,但似乎需要N * N时间。 这是大投入的一个重要因素,并且需要花费大量时间。
我的算法就是这样,但对于大量数据来说,它并不是最好的算法
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;
if((length+1)%2 != 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;
}
}
else {
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;
}
你想要的是在agrep中实现的,所以看看它使用的算法 。
我认为你所追求的是Boyer-Moore算法。
具体来说, 这里是近似版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.