码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 蓝桥杯每日一题(kmp)


    //141 周期

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

    kmp算法求循环节;

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

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

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

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

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

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

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

    1. #include
    2. using namespace std;
    3. const int N=1e6+10;
    4. int n,m;
    5. char s[N];
    6. int ne[N];
    7. //141周期
    8. int main()
    9. {
    10. int T=0;
    11. while(scanf("%d",&n),n)
    12. {
    13. scanf("%s",s+1);
    14. for(int i=2,j=0;i<=n;i++)
    15. {
    16. while(j&&s[i]!=s[j+1])j=ne[j];
    17. if(s[i]==s[j+1])j++;
    18. ne[i]=j;
    19. }
    20. cout<<"Test case #"<<++T<
    21. for(int i=1;i<=n;i++)
    22. {
    23. int t=i-ne[i];
    24. if(i%t==0&&i/t>1)cout<" "<
    25. }
    26. cout<
    27. }
    28. }

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

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

    1. #include
    2. //831 kmp字符串
    3. using namespace std;
    4. const int N=1e5+10,M=1e6+10;
    5. int n,m;
    6. char p[N];//p和s都是从1开始存
    7. char s[M];
    8. int ne[N];//从0开始
    9. int main()
    10. {
    11. cin>>n>>s+1>>m>>p+1;
    12. //求next数组
    13. ne[1]=0;
    14. for(int i=2,j=0;i<=n;i++)
    15. {
    16. while(j&&s[i]!=s[j+1])j=ne[j];
    17. if(s[i]==s[j+1])j++;
    18. ne[i]=j;//与i当前位置为末尾所代表的后缀
    19. //与其对应的前缀的末尾位置下标。
    20. }
    21. //匹配的过程
    22. for(int i=1,j=0;i<=m;i++)
    23. {
    24. while(j&&p[i]!=s[j+1])j=ne[j];
    25. if(p[i]==s[j+1])j++;
    26. if(j==n)//已经匹配到最后了
    27. {
    28. cout<" ";
    29. //一定要注意
    30. j=ne[j];
    31. }
    32. }
    33. }

  • 相关阅读:
    [pybind11] debug C++代码
    Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    JS实现带并发的异步任务调度器-promise
    android Seekbar当点击的时候有一个圆圈
    自动升级程序的实现方案(delphi版)
    JS中的数据类型
    计算机常见I/O操作介绍、I/O操作优化提升程序性能方法(异步I/O、多线程和多进程、非阻塞I/O、I/O多路复用)
    【ArcGIS微课1000例】0054:尺寸注记的创建与编辑
    技术岗/算法岗面试如何准备?5000字长文、6个角度以2023秋招经历分享面试经验
    golang读取键盘功能按键输入
  • 原文地址:https://blog.csdn.net/qq_61369552/article/details/136599820
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号