kmp单片自动机
2016-06-22 10:59
197 查看
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int nxt[maxn]; // find s in t int kmp(char *s, char *t) { int ret = 0; int m = strlen(s); nxt[0] = -1; for (int i = 1, j = -1; i < m; i++) { while (j != -1 && s[i] != s[j + 1]) { j = nxt[j]; } if (s[i] == s[j + 1]) { j++; } nxt[i] = j; } // for(int i = 1 ; i < m; i ++){ // cout <<" i = "<<i <<" next = "<< nxt[i] <<endl; // } int n = strlen(t); for (int i = 0, j = -1; i < n; i++) { while (j != -1 && t[i] != s[j + 1]) { j = nxt[j]; } if (t[i] == s[j + 1]) { j++; } if (j == m - 1) { ret++; j = nxt[j]; } } return ret ; } int main(){ char t[100] ="accbaccbaccaccbbbaccaccd" ; char s[100] ="accaccd"; cout << t <<endl; cout << kmp(s, t) << endl; }
相关文章推荐
- iOS 开发之Target-action模式
- Oracle查看耗资源SQL
- swift Alamofire+ObjectMapper——swift(学习九)
- ECSHOP通过改变模板路径制作手机站
- Tachyon源码结构分析(四)
- ROS下使用摄像头
- win7 solr6.1.0+jdk1.8
- *p++/(*p)++/*(p++)的区别
- Linux 调优方案, 修改最大连接数(ulimit命令)
- 编译安装nginx
- C语言动态库的使用
- matlab连续读取多幅图像
- Redhat7.2配置免费yum源(简单五步轻松搞定)
- Android Studio中如何打JAR包
- Tachyon源码结构分析(三)
- Xcode 环境变量
- 如何定义XSD并在XML中使用XSD
- redis常用操作总结
- 构建之法阅读笔记03
- lucene_43版本创建索引demo