摘要: 这是一道简单的KMP求next数组的题,几乎不用动脑筋,可以用来练练手,直接把两个字符串连接在一起求next就行了,唯一要注意的就是长度不能大于原来任一字符串的长度,如果长度大于了,要选择len1和len2中较小的一个输出。#include<stdio.h>#include<string.h>#define MAX_STR 50005char str1[MAX_STR*2],str2[MAX_STR]; int next[MAX_STR*2];void get_next(int,int);int main(){ char oupt[MAX_STR]; while(sca 阅读全文
posted @ 2012-08-13 21:05 等待电子的砹 阅读(526) 评论(0) 推荐(0)
摘要: 这道题是考察对next数组性质的应用。题意相当于是求一个长字符串中循环节的个数。 由于我们知道next数组中存的是一个位置(假设next[j]的值为k,对应的字符串为M,如果k>0,那么M[0....k-1]和M[j-k.....j-1]是相同的,并且0...k-1这个序列一定是最长的),比如a b c a b c d(next值:-1 0 0 0 1 2 3 ),由next[6]=3可知,M[0..2]=M[3..6],这就找到了循环节,于是我们思考从next数组作为切入点,来找到一种方法来求得循环节的个数。 看看next数组的一个性质:next始终是从-1开始增加(在变为0之前)。. 阅读全文
posted @ 2012-08-13 10:56 等待电子的砹 阅读(705) 评论(0) 推荐(0)