话说kmp真的挺难理解的,花了挺大功夫的,恩,找了段好理解的代码,做模板了

int KMP(char *s,char *p){
    int ans = -1;
    nex[0] = 0;
    int lenp = strlen(p);//子串长度
    int lens = strlen(s);//母串长度
    for(int i = 1,k = 0; i < lenp; i++) {//先处理字串的nex数组
        while(k > 0 && p[i] != p[k]) {//如果说不匹配,就找到k前面字母对应的值,将该值赋给k,然后比较p[k]与p[i]
            k = nex[k-1];
        }
        if(p[i] == p[k]){
            k++;
        }
        nex[i] = k;
    }
    for(int i = 0,k = 0; i < lens; i++){//用nex数组进行比对
        while(k > 0 && s[i] != p[k]){
            k = nex[k-1];
        }
        if(s[i] == p[k]){
            k++;
        }
        if(k == lenp){
            ans = i - lenp + 1;
            break;
        }
    }
    return ans;
}

  

最新文章

  1. Netty(五)序列化protobuf在netty中的使用
  2. SharePoint 2013 工作流设计之Designer 使用“可视化视图”
  3. highcharts基本配置和使用highcharts做手机端图标
  4. offset client scroll
  5. 斯坦福第十三课:聚类(Clustering)
  6. docker-4 Dockerfile的使用
  7. 使用OC语言编写两个超大数相乘或相加的算法的思路和超大正整数相乘的代码
  8. 铁人系列(2)LA2218
  9. log4j常见问题
  10. 驱动makefile
  11. MyEclipse6.5安装SVN插件的三种方法
  12. Xcode工程使用CocoaPods管理第三方库新建工程时出现异常
  13. 可以放在html代码中的自动跳转代码
  14. SSH抛出org.apache.ibatis.exceptions.PersistenceException: 异常
  15. ubuntu16.04安装flash player与谷歌浏览器(chrome)
  16. 使用docker安装mysql和redis
  17. electron 打包后node_modules 体积过于庞大
  18. Tmutarakan Exams URAL - 1091(莫比乌斯函数 || 容斥)
  19. 将Highcharts图表数据生成Table表格
  20. 关于linux下mysql安装和卸载

热门文章

  1. 关于回波损耗 和 驻波比的摘要 Return Loss and VSWR
  2. C++引用作为函数的参数
  3. Hibernate学习笔记--环境搭建及运行
  4. Spring 自动装配
  5. Java使用java命令运行程序出现:找不到主类错误
  6. 在 Visual Studio 2010 中创建 ASP.Net Web Service
  7. 李洪强iOS开发之-Swift_00_介绍
  8. [转贴]Eclipse IDE for c++配置
  9. Android UI 设计准则
  10. leetcode面试准备:Minimum Size Subarray Sum