对KMP的理解<二> poj 3461

随着对它的记忆加深,对KMP的模板做法也有所感触,类型是一样的,做法也是模板做法,处理的也只是细节问题而已,其实也就是这些细节是需要想的、处理的,不然就是一题了,上篇要求是看是否有子串,如果有返回此子串在另一数串的最先开始的位置,这题与上题要求不同,能出现的次数,而且只要不是同一位置的情况下都算(看了题,应该可以明白这个意思的),不过我感觉应该好处理的,就是i变化是处理妥当就行;

题目链接:           http://poj.org/problem?id=3461

代码如下:

#include<stdio.h>
View Code
 1 #include<string.h>
2 int len1,len2;
3 char str1[10001];
4 char str2[1000001];
5 int next[10001];
6 void index_next()
7 {
8 int i,j;
9 next[0]=-1;
10 j=-1;
11 for(i=1;i<len1;i++)
12 {
13 while(j>-1&&str1[i]!=str1[j+1])
14 j=next[j];
15 if(str1[i]==str1[j+1])
16 j++;
17 next[i]=j;
18 }
19 }
20 int kmp()
21 {
22 int i,j,sum;
23 j=-1;
24 sum=0;
25 for(i=0;i<len2;i++)
26 {
27 while(j>-1&&str2[i]!=str1[j+1])
28 j=next[j];
29 if(str2[i]==str1[j+1])
30 j++;
31 if(j==len1-1)//与上题不同之处就在这里
32 {
33 sum++;
34 j=next[j];
35 }
36 /*if(j==len1-1)//用这个屏蔽的会超时的,答案应该不错,效率不高
37 {
38 sum++;
39 i=i-j+1;
40 j=-1;
41 }*/
42 }
43 return sum;
44 }
45 int main()
46 {
47 int t,d;
48 scanf("%d",&t);
49 getchar();
50 while(t--)
51 {
52 gets(str1);
53 gets(str2);
54 len1=strlen(str1);
55 len2=strlen(str2);
56 index_next();
57 d=kmp();
58 printf("%d\n",d);
59 }
60 return 0;
61 }
 
 

  

转载于:https://www.cnblogs.com/world-ding/articles/2139828.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值