剪花布条 HDU - 2087

kmp轻改

这里有一个条件就是我们在kmp匹配时,匹配的子串不能交错。
很简单稍微改一下就可以了。
当我们匹配成功时,直接让j=0从头开始匹配就好了。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int net[1100];
void getnext(char p[],int size) {
    int i = 0;int j = -1;
    net[0] = -1;net[size]=(char)500;//绝对不会出现的数
    while (i < size) {
        if (j == -1 || p[i] == p[j]) {
            ++i;++j;
            if (p[i] != p[j])
                net[i] = j;
            else net[i] = net[j];
        }
        else j = net[j];
    }
}
int kmp(char s[],int ssize,char p[],int psize) {
    register int i = 0;register int j = 0;
    int res = 0;
    while (i < ssize) {
        if (j == -1 || p[j] == s[i]) { ++i;++j; }
        else j = net[j];
        if (j == psize) {
            ++res;
            j = 0;
        }
    }return res;
}
char s[1100],p[1100];
int main(){
    while (scanf("%s",s)){
        int n = strlen(s);
        if (n==1&&s[0]=='#')break;
        scanf("%s",p);
        int m = strlen(p);
        getnext(p,m);
        printf("%d\n",kmp(s,n,p,m));
    }
}
Kuangbin题单详解(kmpManacher) 文章被收录于专栏

刷Kuangbin题

全部评论

相关推荐

Aki-Tomoya:窝趣,人家这是先富带动后富,共同富裕了属于是
投递英伟达等公司9个岗位
点赞 评论 收藏
分享
02-01 19:48
门头沟学院 Java
神哥了不得:(非引流)直接暑期吧,没时间日常了,老鱼简历把水印去了,或者换个模板,简历字体大小都不太行,建议换2个高质量的项目,面试应该还会再多一些
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务