KMP算法 --数据结构实验之串一:KMP简单应用
2016-08-04 21:15
316 查看
数据结构实验之串一:KMP简单应用
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定两个字符串string1和string2,判断string2是否为string1的子串。
输入
输入包含多组数据,每组测试数据包含两行,第一行代表string1(长度小于1000000),第二行代表string2(长度小于1000000),string1和string2中保证不出现空格。
输出
对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。
示例输入
abc a 123456 45 abc ddd
示例输出
1 4 -1
提示
#include<stdio.h> #include<string.h> #include<stdlib.h> char t[1000005],p[1000005];//T为主串,P为模式串 int 4000 next[1000005]; int lent; int lenp; //求NEXT函数 void getnext(char p[]) { int i=0,j=-1; next[0]=-1; while(i<lenp) { if(j==-1||p[i]==p[j]) { i++; j++; if(p[i]!=p[j]) {next[i]=j;} else { next[i]=next[j]; } } else { j=next[j]; } } } //匹配 void kmp(char t[],char p[]) { int i,j; i=j=0; while(i<lent&&j<lenp) { if(j==-1||t[i]==p[j]) { i++; j++; } else { j=next[j]; } } if(j==lenp) { printf("%d\n",i-lenp+1); } else { printf("-1\n"); } } int main() { while(~scanf("%s %s",&t,&p)) { lent=strlen(t); lenp=strlen(p); getnext(p); kmp(t,p); } return 0; }
相关文章推荐
- 数据结构实验之串三:KMP应用
- CDOJ1339 郭大侠与线上游戏
- SDUT 3345 数据结构实验之二叉树六:哈夫曼编码
- CDOJ1329 卿学姐与魔法
- 数据结构实验:连通分量个数
- 【大话数据结构&算法】希尔排序
- 串学密码学一定得学程序
- 串结构练习——字符串连接
- 数据结构实验之栈六:下一较大值(二)
- codeup--22071(改)
- go database/sql 源码分析(四)sql.Stmt数据结构
- 数据结构实验之栈五:下一较大值(一)
- go database/sql 源码分析(三)sql.DB数据结构
- 数据结构实验之图论八:欧拉回路
- Balanced Lineup(POJ 3264)(数据结构之线段树)
- 顺序表应用6:有序顺序表的查询
- 顺序表应用5:有序顺序表归并
- 数据结构实验之串三:KMP应用
- 顺序表应用4:元素位置互换之逆置算法
- 数据结构·后缀数组