数据结构实验之串一:KMP简单应用
来源:互联网 发布:英国域名后缀 编辑:程序博客网 时间:2024/06/06 18:26
数据结构实验之串一:KMP简单应用
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
给定两个字符串string1和string2,判断string2是否为string1的子串。
Input
输入包含多组数据,每组测试数据包含两行,第一行代表string1(长度小于1000000),第二行代表string2(长度小于1000000),string1和string2中保证不出现空格。
Output
对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。
Example Input
abca12345645abcddd
Example Output
14-1
Hint
Author
cjx
#include<bits/stdc++.h>using namespace std;//注意数组从0开始//char str1[1000001], str2[1000001];int next[1000001];void get_next(){int i = 0; //i是next数组下标next[0] = -1;int j = -1; //j是模板字符串前后缀长度while (str2[i] != '\0') //从第二个字符开始,计算next数组对应的值{if (j == -1 || str2[i] == str2[j]) //如果相等,下标后移,前后缀长度加1{i++;j++;next[i] = j;//printf("%d ",next[i]);}else{j = next[j]; //失配时j的值}}}void kmp(){int i = 0, j = 0;get_next();int len1 = strlen(str1);int len2 = strlen(str2);while (i < len1 && j < len2){if (j == -1 || str1[i] == str2[j]){i++;j++;}else{j = next[j]; //失配时str2回溯的位置}}if (j >= len2){printf("%d\n", i - len2 + 1); //输出第一次匹配时的位置}else{printf("%d\n", -1);}}int main(){while (cin >> str1 >> str2){kmp();}return 0;}/*int main(){string b;while (cin >> b){getnext(b);for (int i = 1; i <= 8; i++){printf("%d ", next[i]);}}return 0;}*/
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简单应用
- PhotoView使用步骤
- Linux下的C语言编程——10进制转换成任意进制的字符串
- 欢迎使用CSDN-markdown编辑器
- python学习笔记 高阶函数map/reduce
- 表的增删改
- 数据结构实验之串一:KMP简单应用
- Android群英传--动画机制与技巧(二)
- logit和logistic模型
- Android - Attr、Style、Theme浅析
- python使用pip安装模块的时候出现ascii错误
- 【CodeForces】444A - DZY Loves Physics(图论规律)
- Docker学习笔记(3)-- 如何使用Dockerfile构建镜像
- 每日小结
- 常见十大异常