KMP算法

#include<string>
#include<vector>
#include<stdio.h>

using namespace std;

void get_next(const string str,vector<int>& next)
{
     int i=0;
     int j=-1;
    next[0]=-1;
   while(i<str.length)
       {
               if(j==-1||str[i]==str[j])
              {
                       ++i;++j;
                      if(str[j]!=str[i])
                      next[i]=j;
                      else
                     next[i]=next[j];
              }
             else
                j=next[j];
       }
}

  以上是next数组的获取函数

int kmp(string str1,string str2,int i)
{
       int int j=0;
       vector<int>next(str2.size());
      get_next(str2,next);
     while(i!=str1.length()&&j!=str2.length())
        {
                   if(j==-1||str1[i]==str2[j])
                   {
                              ++i;++j;
                    }
                 else
              j=next[j]
        }
          return j==str2.length()?i-j:-1; 
}

  

posted on 2015-08-02 15:16  菜鸟基地  阅读(134)  评论(0)    收藏  举报

导航