摘要: 这道题我就不解释了,无非就是枚举取字串,然后kmp进行比较。本来不大想贴着道题的。但是我很悲剧的是为了省事直接在上一道KMP上贴的代码,然后用了一个memset函数,我的pre数组开刀了一百万= =。不过还是比较值得的,花了时间不少但是还是知道了memset是需要花费时间的。View Code #include <iostream>#include <stdio.h>#include <string.h>using namespace std;int pre[100];void predeal(char s[]){ int len,i,j; len = st 阅读全文
posted @ 2012-07-20 19:13 某某。 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 原网址http://www.matrix67.com/blog/archives/115如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你喜欢的人表白的话,我的名字是你的告白语中的子串吗?”解决这类问题,通常我 阅读全文
posted @ 2012-07-20 14:23 某某。 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题目http://poj.org/problem?id=2406/*一开始不大理解,写了个笨方法,就是从s[0]开始找。因为一定是从s[0]开始的子串只要len==len1*count 就直接输出,后来发现tle /* memset(s1,0,sizeof(s1)); for(i = 0;i < len;i++) { s1[i] = s2[i]; predeal(s1); for(i = 0;s2[i] != '\0';i++) printf("%d ",pre... 阅读全文
posted @ 2012-07-20 13:14 某某。 阅读(273) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3461纯KMP不多说上代码= =。。View Code #include <iostream>#include <stdio.h>#include <string.h>using namespace std;int pre[10005];void predeal(char s[]){ int len,i,j; len = strlen(s); pre[0] = -1; j = -1; for(i = 1;i < len;i++) { while(j > -1 && s[j+1] 阅读全文
posted @ 2012-07-20 12:32 某某。 阅读(132) 评论(0) 推荐(0) 编辑