字符串匹配算法

1.BF算法

    算法复杂度O(m*n)

int BFMatch(string s,string p){
   int i=0,j=0;
   while(i<s.length()){
        j=0;
      while(s[i]==p[j]&&j<p.length()){//小心字符串结尾都有个\0结束符,如果刚好匹配到结尾,没加限定j会比真实值大1!
        i++;
        j++;
      }
      if(j==p.length())
        return i-j;
      else
        i=i-j+1;
   }
   return -1;
}

2.KMP匹配算法

   算法复杂度O(m+n)

int getnext(string p,int *next){
    int i=0,j=-1;
    next[0]=-1;
    while(i<p.length()-1){//小心i越界,i=p.length()时,++i后,next[i]=j;
     if(j==-1||p[i]==p[j]){
        ++j;
        ++i;
        next[i]=j;
     }
     else
        j=next[j];
    }
}
int KMPMatch(string s,string p){
    int next[100],i=0,j=0;
    getnext(p,next);
   while(i<s.length()){//这里的i的范围和前面的不同!!
       if(j==-1||s[i]==p[j]){
        ++i;
        ++j;
       }
       else
        j=next[j];
       if(j==p.length())
        return i-p.length();
    }
    return -1;
}
posted @ 2014-11-26 19:27  遥不可及,故叫梦想  阅读(159)  评论(0编辑  收藏  举报