首页 > 其他分享 >洛谷P3375 kmp字符串匹配

洛谷P3375 kmp字符串匹配

时间:2022-10-01 23:33:40浏览次数:57  
标签:lb 匹配 int 1000005 while kmp 洛谷 P3375

#include<bits/stdc++.h>
#define int long long
using namespace std;
int i, j, k, la, lb, kmp[1000005];
char a[1000005], b[1000005];
signed main(){
    scanf("%s%s", a+1, b+1);//a为文本串, b为模式串 
    la = strlen(a+1), lb = strlen(b+1);
    //b[1]匹配自己为0 
    for(i=2; i<=lb; i=-~i){//自己匹配自己 
        while(j&&b[j+1]!=b[i]) j=kmp[j];//j为当前到的最长长度(最长子串结尾下标)
        //此while是用于判断匹配不成功的情况(直到成功为止) 
        if(b[j+1]==b[i]) j++;
        kmp[i] = j;
    }
    for(i=1, j=0; i<=la; i=-~i){
        while(j&&b[j+1]!=a[i]) j=kmp[j];
        if(b[j+1]==a[i]) j++;
        if(j==lb){//匹配完一个
            printf("%d\n", i-lb+1);//输出开头
            j=kmp[j]; 
        }
    }
    for(i=1; i<=lb; i=-~i){
        printf("%d ", kmp[i]);
    }
    return 0;
}

标签:lb,匹配,int,1000005,while,kmp,洛谷,P3375
From: https://www.cnblogs.com/Gzyoung/p/16748008.html

相关文章

  • 洛谷 P1506 拯救oibh总部(DFS / 染色法)
    https://www.luogu.com.cn/problem/P1506题目描述给定n*m的图形,由*和0组成。让我们求出被*四面包围了的0的数量。输入#1450000000*000*0*000*00输出......
  • 洛谷 P2709 小B的询问 题解
    莫队板子。//P2709小B的询问#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintMAXN=50005;structQuery{ intl,r,id;}q[MAXN];in......
  • 暴力匹配算法、KMP算法
    应用实例暴力匹配算法代码实现publicclassViolenceMatch{publicstaticvoidmain(String[]args){//测试暴力匹配算法Stringstr1="硅硅谷尚硅谷你尚硅......
  • 洛谷 P2419 [USACO08JAN]Cow Contest S(最短路:floyed)
    https://www.luogu.com.cn/problem/P2419题目大意:给定n头奶牛(1<=N<=100),按1..N依次编号。m轮:两两之间进行对决,赢了的排在左边,输了的排在右边。我们想知道奶牛们编......
  • KMP
    Border如果字符串\(S\)的同长度的前缀和后缀完全相同,即\(Prefix[i]=Suffix[i]\)则称此前缀(后缀)为一个\(Border\)(根据语境,有时\(Border\)也指长度)。特殊地,字符串......
  • Leetcode 字符串轮转 KMP
    解题思路题面两倍s1变成字符串匹配,用KMP。KMP预先处理模式串(短串)的\(next[]\)数组,\(next[]\)的意思为自我匹配一样的值的下一个的位置。复杂度\(O(n)\)代码classSo......
  • 洛谷P8551 Bassline 题解
    P8551Bassline题解分析这道题做月赛的时候想了好久,最后发现其实很简单。我们用样例数据来分析:如图所示,我们将每个区间抽象化为一个一个的长条。题目给我们的两个要......
  • 洛谷 P7861 SAVEZ 题解(哈希)
    2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解目录2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解比赛链接题目题目描述输入格式输出格式样例样例......
  • P2671 [NOIP2015 普及组] 求和(洛谷前缀和
    P2671[NOIP2015普及组]求和1//(x+z)*(num[x]+num[z])=2//(x1+x2)*(y1+y2)+(x1+x3)*(y1+y3)+(x2+x3)*(y2+y3)3//=x1*(y1*(n-2)+y1+y2+...+yn)4//+x2*(y2*......
  • 洛谷 P3193 [HNOI2008]GT考试
    原题链接dp+矩阵加速明天再来写#pragmaGCCoptimize(2)#include<bits/stdc++.h>usingnamespacestd;#definefrfirst#definesesecond#defineet0exit(0);#......