hiho一下1015
来源:互联网 发布:知乎泰语翻译价格 编辑:程序博客网 时间:2024/06/05 20:10
之前说了KMP中next的应用,今天做了这道题,又栽了。
这道题跟我之前写的有一个小区别
比如子串aa,模式串aaaa。
之前写的答案是2,现在的答案是3。
就是模式串中的字母可以重复使用,但不可以一模一样。
开始的时候我改了i的坐标位置。这样就是可以使他接着匹配成功
#include<stdio.h>#include<string.h>const int maxn=1e6+10;char s1[maxn],s2[maxn];int next[maxn];int len1,len2,f;int main(){ int n; scanf("%d",&n); while(n--) { scanf("%s%s",s1,s2); len1=strlen(s1); len2=strlen(s2); int i=0,j=-1; memset(next,0,sizeof(next)); next[0]=-1; while(i<len1) { if(j==-1||s1[i]==s1[j]) next[++i]=++j; else j=next[j]; } for(int i=1;i<=len1;i++) printf("%d ",next[i]); puts(""); i=0,j=0,f=0; int ans=0; while(i<len2) { if(f==1) break; if(s1[j]==s2[i]) { if(j==len1-1) { ans++; <span style="color:#ff0000;">j=next[j];//就是这一步。以前都是j=-1</span> //printf("%d %d\n",i,j); } else { i++,j++; } } else { if(j==-1) { i++; j++; } else j=next[j]; } } printf("%d\n",ans); } return 0;}
的第二个字母继续匹配。
但是超时了。
然后把j=-1改成了 j=next[j]就过了。
其实他继续匹配的时候没有把j变0,而是继续往下匹配。就达到了重复使用了字母的效果。
0 0
- hiho一下1015
- hiho hiho一下第三周 #1015 : KMP算法
- hiho一下 第八周
- hiho一下 第十五周
- hiho一下 Trie树
- hiho一下 第一周
- hiho一下 第二周
- hiho一下 第三周
- hiho一下 第五十周
- hiho一下 第五十一周
- hiho一下 欧拉路三
- hiho一下 KMP 算法
- hiho一下58周
- hiho一下第六十周
- hiho一下 第六十周
- hiho一下 第六十一周
- hiho一下 第六十四周
- hiho一下题解汇总
- How-to: resolve " java.lang.OutOfMemoryError: unable to create new native thread" for hbase thrift
- oracle 物化视图导入导出报错
- 增加玩家炮弹个数,发射频率
- 51nod:天堂里的游戏
- 轻量级框架和重量级框架对比
- hiho一下1015
- Oralce动态视图v$session_longops使用
- ci的执行流程
- .LDS 文件详解
- 1003-HBase集群搭建
- 玩转iOS开发 - 网络请求
- 《Unix内核源码剖析》读书笔记02-进程管理【父进程与子进程】
- Java 分治算法实现排序数索引(二分搜索)
- no known conversion for argument 1 from ‘[some_class]' to ‘[some_class]&’ 传const引用而非引用