秒懂kmp算法

8人阅读 评论(0) 收藏 举报
分类:
#include <stdio.h>
#include <string.h>
void cal_next(char *str,int *next,int len)
{//给定一个字符串计算next数组
    next[0] = -1;//next[0] 初始化为-1,表示不存在相同的最大前缀和最大后缀
    int k = -1;
    for(int q = 1;q <= len;q ++)
    {
        while(k > -1 && str[k + 1] != str[q])//如果下一个字符不同,那么k就是next[k],注意next[k] 一定小于k,不论k是什么
        {
            k = next[k];//如果没能找到结束的地方,那么这个子串就没有 最长前缀和最大后缀相同
        }


        if(str[k + 1] == str[q])//如果相同,k ++
        {
            k ++;
        }
        next[q] = k;//找到了最长前缀和最长后缀
    }
}


int KMP(char *str,int slen,char *ptr,int plen)
{
    int *next = new int[plen];
    cal_next(ptr,next,plen);
    int k = -1;
    for(int i = 0;i<slen;i ++)
    {
        while(k > -1 && ptr[k + 1] != str[i])//ptr和str不匹配,而且k > -1//表示ptr和str有部分匹配
        {
            k = next[k];//往前回溯
        }


        if(ptr[k + 1] == str[i])
        {
            k ++;
        }


        if(k == plen - 1)//说明k一栋到ptr的最末端
        {
            return i - plen + 1;//返回对应的位置
        }
    }
    return -1;//没有找到
}


int main()
{
    char *str="1234567890qwertyuiopasdfghjkl";
    char *ptr = "yui";
    int position = KMP(str,strlen(str),ptr,strlen(ptr));


    printf("result position %d\n",position);


    return 0;
}
查看评论

Enhanced Management Console for JBoss™ released

这下用jboss就爽了!EPI-USE recently released a new version of OpenTier? Manger, a Management Console for th...
  • jeanger
  • jeanger
  • 2004-03-31 12:23:00
  • 842

三分钟秒懂java注解

元注解 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD}) @Documented @Inherited public ...
  • hj7jay
  • hj7jay
  • 2016-08-04 10:55:09
  • 385

经典KMP算法回顾

详细内容可以看百科:http://baike.sogou.com/v592179.htm  我主要讲自己的理解 KMP是字符串的模式匹配算法,时间复杂度为O(m+n)即O(n) 通过下面的代码进...
  • u010579068
  • u010579068
  • 2015-09-11 16:11:17
  • 991

5分钟让你搞懂量子计算

原文地址 在北京时间9月11日,阿里云宣布世界知名量子计算科学家、密西根大学终身教授施尧耘已经入职阿里巴巴,担任阿里云量子技术首席科学家,他的主要工作是组建并负责阿里云量子计算实验室...
  • yunqishequ1
  • yunqishequ1
  • 2017-09-13 14:35:11
  • 738

深入javascript之原型和原型链

原型和原型链是js中的难点也是重点,明白了原型和原型链会让我们在后面不管是学习还是工作都会更加高效,并且原型和原型链会是面试中必不可少的话题。看完此篇文章一定会让你对原型,原型链有深刻全面的了解。深入...
  • yucihent
  • yucihent
  • 2018-03-02 21:22:27
  • 1724

秒懂命令模式

在软件开发中,由于请求者与行为实现者之间存在过高的耦合,这样对于同一个接口存在多处调用的情况下,我们对其进行封装,这样供各处调用,而且大大的降低了请求者与行为执行者之间的耦合度。在实际运用中,例如在客...
  • Barnetthe
  • Barnetthe
  • 2015-08-11 17:35:28
  • 438

秒懂排序算法

作者:郭耀华,来自:cnblogs.com/guoyaohua0、排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在...
  • g6U8W7p06dCO99fQ3
  • g6U8W7p06dCO99fQ3
  • 2018-03-23 00:00:00
  • 30

秒懂数据库三范式

懂得数据库范式,对于设计出一个合理的数据库有很大的帮助。本文根据自己对数据库范式的理解,结合具体的例子,尝试着用通俗易懂的语言讲明白数据库三范式。 第一范式(列不可拆分) 如果数据库中所有的字...
  • yizhishl
  • yizhishl
  • 2014-08-03 12:53:06
  • 426

秒懂ajax轮询、long poll 、websocket

ajax轮询 场景再现: 客户端:啦啦啦,有没有新信息(Request) 服务端:没有(Response) 客户端:啦啦啦,有没有新信息(Request) 服务端:没有。...
  • u012094427
  • u012094427
  • 2017-08-15 22:02:18
  • 117

两张图秒懂Python版爬虫

得有一定的相关基础! 得有一定的相关基础! 得有一定的相关基础! 具体python代码实现百度里一大堆,有库在手,天下我有,重在理解原理! 具体python代码实现百度里一大堆...
  • weixin_39928244
  • weixin_39928244
  • 2018-02-06 13:02:50
  • 47
    个人资料
    持之以恒
    等级:
    访问量: 8622
    积分: 561
    排名: 9万+
    最新评论