数据结构实验之串一:KMP简单应用
来源:互联网 发布:2017大数据标准化论坛 编辑:程序博客网 时间:2024/06/07 23:43
这道题的关键在于回溯 j 值的时候,如何避免不必要的回溯,kmp算法就是求得一个next数组, 这个数组就是用来计算 j 的回溯值。
代码如下:
#include <stdio.h>
#include <string.h>
int next[1000001];
char s1[1000001],s2[1000001];
void get_next(int len){
int i,j;
i=0;
j=-1;
next[0]=-1;
while(i<len){
if(j==-1||s2[i]==s2[j]){/*s2[i]表示前缀字符,s2[j]表示后缀字符*/
++i;
++j;
if(s2[i]!=s2[j])//若当前字符与前缀字符不同,
next[i]=j;//则当前的j为next在i位置的值;
else
next[i]=next[j];//如果与当前字符相同,则将前缀字符的next值赋给next在i位置的值;
//next[i]=j;
}
else
j=next[j];//若字符不相同,则j值回溯;
}
}
int main(){
int n,m,i,j;
while(scanf("%s %s",s1,s2)!=EOF){
n=strlen(s1);
m=strlen(s2);
get_next(m-1);//求next数组;
i=0;
j=0;
while(i<n&&j<m){
if(j==-1||s1[i]==s2[j]){
i++;
j++;
}
else{
j=next[j];//j退回到合适的位置,i值不变;
}
}
if(j>=m)
printf("%d\n",i-j+1);
else
printf("-1\n");
}
return 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简单应用
- Lua脚本简介
- matlab strcmp
- Python爬取网站图片
- dubbo+zookeeper与提供者、消费者之间端口通信问题(No provider available for the service)
- android lk解读 (4)---线程的等待执行
- 数据结构实验之串一:KMP简单应用
- Handle the special case for OGG
- [Jenkins]详解jenkins几个有用的插件如何使用
- ARM Generic Interrupt COntroler (GIC)-Introduction
- AFNetworking3.1 基本使用
- 学习JAVA之路,开始了
- eclipse安装git插件及使用
- 多线程的创建的两种方法
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)