数据结构实验之串一:KMP简单应用
2017-10-19 08:43
225 查看
#include<bits/stdc++.h> using namespace std; #define maxN 1000100 void getnext(char b[], int next[])///这个应该是没有问题的 { int j, n, i = 0; n = strlen(b); next[0] = -1; j = -1; while(i < n)///这一块好说,就是如果相等就往后移并且++,不相等就回溯 { if(j == -1 || b[i] == b[j]) next[++i] = ++j; else j = next[j]; } } void kmp(char a[], char b[], int next[])///这一块就是:j首先要放到0(用来比较第一位) { getnext(b, next); int i = 0, j = 0, m = strlen(a), n = strlen(b); while(i < m && j < n) { if(j == -1 || a[i] == b[j])///如果相等就都往后移 { ++i, ++j; } else///否则回溯 j = next[j]; } if(j >= n)///如果b串跑到底了,说明存在这个子串 printf("%d\n", i - n + 1);///输出 else printf("-1\n"); } int main() { char a[maxN], b[maxN]; int next[maxN]; while(~scanf("%s %s", a, b)) { kmp(a, b, next); } return 0; }
相关文章推荐
- KMP算法 --数据结构实验之串一:KMP简单应用
- SDUT 2772 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- [SDUT](2772)数据结构实验之串一:KMP简单应用 ---KMP(串)
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- SDUT 2272 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- SDUTACM 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用