码迷,mamicode.com
首页 > 其他好文 > 详细

KMP算法实现字符串匹配

时间:2014-09-17 23:08:52      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   div   

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;

int main()
{
    string str,p;
    cin>>str>>p;
    int n=str.length();
    int m=p.length();
    
    //compute prefix function
    int pre[100];
    pre[0]=-1;
    int k=-1;
    for(int j=1;j<m;j++)
    {
       while(k!=-1&&p[k+1]!=p[j])//这里刚开始用if,现在用while,这是为什么呢? j往后退,寻找新的可能性
       {
          k=pre[k];
       }
       if(p[k+1]==p[j])
       {
          k=k+1;
       }
       pre[j]=k;
    }
    for(int i=0;i<m;i++)
    {
       printf("%d ",pre[i]);
    }
    int j=-1;
    for(int s=0;s<n;s++)
    {
        while(j!=-1&&p[j+1]!=str[s])
           j=pre[j];
        if(p[j+1]==str[s])
           j++;
        if(j==m-1)//当j到达m-1时候,字符串就已经匹配成功了
        {
           printf("Match!\n");
           //break;
           j=-1;//multi match ,如果允许已经匹配的字符串重叠呢?
        }
    } 
    printf("\n");
    getchar();
    getchar();
    return 0;
} 

Question: 字符串A是否是字符串B的字串?

A: KMP算法

资料: http://www.ituring.com.cn/article/59881 讲得很透彻

http://www.matrix67.com/blog/archives/115 原创讲解

http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/ 为什么学算法这么难?

KMP算法实现字符串匹配

标签:style   blog   http   color   io   os   ar   for   div   

原文地址:http://www.cnblogs.com/championlai/p/3978191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!