具有一个不匹配的字符串的算法

时间:2012-02-24 00:46:01

标签: c++ string algorithm comparison string-comparison

有人可能会建议一个更好的方法来进行两个字符串之间的字符串比较,最多只有一个不匹配。

示例:

  • A:abcdefghabX
  • B:abc
  • 输出:1 9

以上输出是“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;
}

2 个答案:

答案 0 :(得分:3)

你想要的是在agrep中实现的,所以看看它使用的algorithms

答案 1 :(得分:2)

我认为你所追求的是Boyer-Moore算法。

具体来说,是近似版本here