蓝桥杯每日一题(kmp)

//141 周期

求一个字符串的所有前缀的循环节出现的最大次数。也就是最小循环节

kmp算法求循环节;

将原串移动,移动后我们得知,四个黑色大括号完全相同。在下图所示的事例中,原串只有两个循环节,加一个红括号。k3加一个红括号的长度就是kmp中的next数组。

字符串长度-next即为循环节长度。

下面的串向右移动的长度为n-next,而next是最大的前后缀相等的长度。所以移动的长度K是最小的循环节。

上面我们做了什么事:我们根据字符串的next数组的最大值,将其向后移动,使得前后缀重合。

又根据一些特点,(移动前后对应位置相等,前后缀对应相等)得到规律。

但是上面作图的前提是一个串去除了后缀之后的剩余长度。比后缀小。否则构成不了关系。

下面这种情况就不能构成后缀是由某个循环体构成的。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,m;
char s[N];
int ne[N];
//141周期
int main()
{
    int T=0;
    while(scanf("%d",&n),n)
    {
       scanf("%s",s+1);
       for(int i=2,j=0;i<=n;i++)
       {
        while(j&&s[i]!=s[j+1])j=ne[j];
        if(s[i]==s[j+1])j++;
        ne[i]=j;
       }
       cout<<"Test case #"<<++T<<endl;
       for(int i=1;i<=n;i++)
       {
           int t=i-ne[i];
           if(i%t==0&&i/t>1)cout<<i<<" "<<i/t<<endl;
       }
       cout<<endl;

    }
}

831 kmp字符串(第一个自己ac的kmp)

还犹豫下午到底还学不学kmp

cpp 复制代码
#include<bits/stdc++.h>
//831 kmp字符串
using namespace std;
const int N=1e5+10,M=1e6+10;
int n,m;
char p[N];//p和s都是从1开始存
char s[M];
int ne[N];//从0开始
int main()
{
    cin>>n>>s+1>>m>>p+1;
    //求next数组
    ne[1]=0;
    for(int i=2,j=0;i<=n;i++)
    {
        while(j&&s[i]!=s[j+1])j=ne[j];
        if(s[i]==s[j+1])j++;
        ne[i]=j;//与i当前位置为末尾所代表的后缀
        //与其对应的前缀的末尾位置下标。
    }

    //匹配的过程
    for(int i=1,j=0;i<=m;i++)
    {
        while(j&&p[i]!=s[j+1])j=ne[j];
        if(p[i]==s[j+1])j++;
        if(j==n)//已经匹配到最后了
        {
            cout<<i-n<<" ";
            //一定要注意
            j=ne[j];
        }

    }
}
相关推荐
qq_459234426 天前
【题库】| 商用密码应用安全性评估从业人员考核题库(四十)
职场和发展·密码学·学习方法·考核·商用密码·商用密码应用安全性评估·密评
敲敲了个代码6 天前
[特殊字符] 空数组的迷惑行为:为什么 every 为真,some 为假?
前端·javascript·react.js·面试·职场和发展
诚思报告YH6 天前
视频面试软件市场洞察:2026 - 2032年复合年均增长率(CAGR)为10.3%
面试·职场和发展
重生之后端学习6 天前
74. 搜索二维矩阵
开发语言·数据结构·算法·职场和发展·深度优先
tyb3333336 天前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
Pitiless-invader6 天前
MySQL 相关知识及面试问题汇总
面试·职场和发展
重生之后端学习6 天前
35. 搜索插入位置
java·数据结构·算法·leetcode·职场和发展·深度优先
逆境不可逃6 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
筱昕~呀6 天前
冲刺蓝桥杯-DFS板块(第二天)
算法·蓝桥杯·深度优先
zheshiyangyang6 天前
前端面试基础知识整理【Day-10】
前端·面试·职场和发展