您的位置:首页 > 其它

KMP算法

2016-06-23 11:25 253 查看
            字符串匹配(KMP算法)

/**** **** **** **** **** ****

*    Function Name :        字符串匹配(KMP算法)

*    Description :        O(N+M)

**** **** **** **** **** ****/ 
void get_nextval(const string & s, int * p)

{

     int i = 0,j = -1;

     p[0] = -1;

     while(i < s.size()) {

          if(j == -1 || s[i] == s[j]) {

               ++i,++j;

               if(s[i] != s[j]) p[i] = j;

               else

                    p[i] = p[j];     

          }

          else j = p[j];

     }

}
int Index_KMP(const string & s, const string & s1, int pos)

{

     int i = pos - 1,j = 0;

     int * next = new int[s1.size()];

     

     get_nextval(s1,next);

     while(i <= s.size() && j <= s1.size()) {

          if(j == -1 || s[i] == s1[j])     ++i,++j;

          else     j = next[j];

     }

     if(j > s1.size())     return i - s1.size();

     else     return -1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  KMP算法