数据结构实验之串一:KMP简单应用
来源:互联网 发布:java中不合法的标识符 编辑:程序博客网 时间:2024/06/09 14:58
Problem Description
给定两个字符串string1和string2,判断string2是否为string1的子串。
Input
输入包含多组数据,每组测试数据包含两行,第一行代表string1(长度小于1000000),第二行代表string2(长度小于1000000),string1和string2中保证不出现空格。
Output
对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。
Example Input
abc
a
123456
45
abc
ddd
Example Output
1
4
-1
KMP算法
普通版
#include<stdio.h>#include<string.h>int next[1000010];char s[1000010],t[1000010];void get_next(char t[1000010]){ int i = 0,j = -1;//j的值和next【j】对应 next[0] = -1;// int len = strlen(t); while(i<len-1) { if(t[i]==t[j]||j==-1) { i++; j++; next[i] = j; } else j = next[j]; }}int KMP(char *s,char *t){ int i = 0; int j = 0; int len1 = strlen(s); int len2 = strlen(t); while(i<len1&&j<len2) { if(s[i]==t[j]||j==-1) { i++; j++; } else j = next[j]; } if(j>=len2) return i-len2+1; else return -1;}int main(){ while(scanf("%s",s)!=EOF) { scanf("%s",t); get_next(t); printf("%d\n",KMP(s,t)); } return 0;}
void get_next(){ int i = 0,j = -1; next[i] = j; while(i<len2-1) { if(j==-1||s[i]==s[j]) { i++; j++; if(s[i]!=s[j]) next[i] = j; else next[i] = next[j]; } else j = next[j]; }}
阅读全文
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简单应用
- Android安卓——Intent通信(1)
- 青岛游记2
- 使用三目运算嵌套方法 或 临时变量方法: 获取三个整数中最大值的数
- Java结构语句
- Arrays常用方法源码
- 数据结构实验之串一:KMP简单应用
- BigDecimal类的使用方法详解
- 【C++】用模板实现顺序表Vector
- mac 利用iTerm2 实现SSH自动登录
- JavaWeb学习笔记-XML-3
- Spring Boot之Spring Initializr搭建
- 五.ARM裸机学习之汇编写启动代码之关看门狗,开iCache,汇编程序和C程序互相调用
- python之Test Suite与Test Runner
- 一个不成熟的人