标签:ext div nbsp https 输出 完整 不能 ref 获得
题目连接:传送门!!!
这里是从头到尾彻底理解KMP的一篇博客,写的非常好 :https://blog.csdn.net/v_JULY_v/article/details/7041827
题意:输入多组样例,每组给定一个模板串S,文本串T,问S在T中出现的次数
这道题主要是为了记录一下kmp的模板, 我太菜了,不能彻底理解 ,先记着吧
void getnext() //获得next数组
{
next[0] = -1;
int j = 0, k = -1;
while(j < len1)
{
if(k == -1 || s1[j] == s1[k])
{
j ++, k ++;
next[j] = k;
}
else
k = next[k];
}
}
void kmp()//输出出现次数
{
ans = 0;
int j = 0, k = 0;
while(k < len2)//遍历文本串
{
if(j == -1 || s1[j] == s2[k])
{
j ++, k ++;
}
else
j = next[j];//模式串移动距离相当于 next[j]
if(j == len1)//如果匹配到一次完整的模式串 ,出现次数++
{
ans ++;
j = next[j]; //回到模式串开头位置,重新找在文本串中找
}
}
printf("%d\n", ans);
}
void kmp()//输出模式串在文本串中的各个位置 ,没找到输出-1
{
int flag = 0;
int j = 0, k = 0;
while(k < len2) //遍历文本串
{
if(j == -1 || s1[j] == s2[k])
{
j ++, k ++;
}
else
j = next[j]; //回到上一个j位置字符的位置
if(j == len1)
{
if(!flag)
printf("%d", k - j);
else
printf(" %d", k - j);
flag = 1;
j = next[j]; //回到模式串开头位置,重新找在文本串中找
}
}
if(!flag)
printf("-1\n");
else
printf("\n");
}
标签:ext div nbsp https 输出 完整 不能 ref 获得
原文地址:https://www.cnblogs.com/yuanweidao/p/10751560.html