数据结构实验之串一:KMP简单应用
来源:互联网 发布:napa软件性能 编辑:程序博客网 时间:2024/06/13 21:44
题目描述
给定两个字符串string1和string2,判断string2是否为string1的子串。
输入
输入包含多组数据,每组测试数据包含两行,第一行代表string1(长度小于1000000),第二行代表string2(长度小于1000000),string1和string2中保证不出现空格。
输出
对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。
示例输入
abca123456#include<bits/stdc++.h>using namespace std;int next[1000001];int len1,len2;char string1[1000001],string2[1000001];void kmp(int x,int y){ int i=0,j=0; while(i<x&&j<y) { if(j==-1||string1[i]==string2[j]) { i++;j++; } else j=next[j]; } if(j>=y) printf("%d\n",i-j+1); else printf("-1\n");}void get_next(int len){ int i=0;next[0]=-1;int j=-1;//在字符串中第一个字符没有前缀,因此赋予初值-1,(当然如果你是从零开始输入的赋值为0)这样得到第二个字符的next值就是0,因为第二个字符也只能回溯到0. while(i<len) { if(j==-1||string2[i]==string2[j]) { i++;j++;next[i]=j;这里就是找前缀和后缀字符串长度的最大值,当比较不相等时,就回溯到这个下标的下一个再接着进行比较。 } else j=next[j];如果不相等就回溯的string【j】的位置再接着进行比较。 }}int main(){ while(~scanf("%s%s",string1,string2)) { len1=strlen(string1); len2=strlen(string2); get_next(len2-1); kmp(len1,len2); }}
45abcddd
示例输出
14-1
0 0
- KMP算法 --数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- SDUT 2272 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- SDUT2772数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用 (sdut oj2772)
- 数据结构实验之串一:KMP简单应用
- sdut oj2772 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- SDUT 2772 数据结构实验之串一:KMP简单应用
- GCD创建线程基础
- 「Githug」Git 游戏通关流程
- Verilog中的参数例化和重定义
- StringUtils方法全集
- hdu 1848 Fibonacci again and again (FIB博弈)
- 数据结构实验之串一:KMP简单应用
- 如何清除adf table组件字段上面自带的filter过滤条件
- maven 项目中使用 jstl标签
- OJ1796求二叉树的深度
- zzulioj 1896 985的买饮料难题
- Spring MVC配置
- ural1057. Amount of Degrees
- Java创建对象的四种方式
- 将XML形式的数据转换成Json格式