【问题标题】:Algorithm for string with one mismatch一个不匹配的字符串的算法
【发布时间】:2012-02-24 00:46:00
【问题描述】:

有人可以建议一种更好的方法来比较两个最多有一个不匹配的字符串。

例子:

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

上面的输出是abc的子串匹配在“A”中的位置

我尝试了两个 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;
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      具体来说,近似版本here

      【讨论】:

      • 谢谢乔尔...帮助很大。
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 2011-02-22
      • 2016-07-19
      相关资源
      最近更新 更多