数据结构实验之串一:KMP简单应用
来源:互联网 发布:zarchiver解压数据错误 编辑:程序博客网 时间:2024/06/18 17:56
Time Limit: 1000MSMemory Limit: 65536KB
SubmitStatistic
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-1kmp算法就是在BF朴素算法的基础上改进的,从原来的i和j要分别回退很长的距离,到kmp的i不用回退,而j回退到next[j];寻找next[j]的过程和kmp的过程其实与Bf算法的过程相似。#include <stdio.h>#include <string.h>int next[1000001]; char str1[1000001],str2[1000001]; void getNext(){int i = 0;next[0] = -1;int j = -1;int len = strlen(str2);while(i < len){if(j == -1||str2[i] == str2[j]){i++;j++;next[i] = j;}else j = next[j];}}int kmp(){int i = 0, j = 0;getNext();
int len1 = strlen(str1);int len2 = strlen(str2);while(i < len1&&j < len2){if(j == 0||str1[i] == str2[j]){i++;j++; }else j = next[j];}if(j >= len2)return i-len2+1;else return -1;}int main(){while(~scanf("%s", str1)){scanf("%s", str2);printf("%d\n", kmp());}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简单应用
- 大数据课程培训大纲及详细说明(全)
- 内部类
- 进程调度学习3
- Java集合类综合
- HDPCD-Java-复习笔记(19)
- 数据结构实验之串一:KMP简单应用
- FPGA作业1:利用74161设计20进制计数器
- Java 内存区域与内存溢出异常
- Ubuntu中安装python3
- 六级_第七天
- FreeRtos-总结(2)
- [设计]单例模式
- Android DiskLruCache完全解析,硬盘缓存的最佳方案(转)
- java面试题集锦