• 蓝桥杯每日一题(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. }

  • 相关阅读:
    Sentinel流控规则可以这样玩?
    使用arduino编写mqtt客户端连接emqx服务器
    利用opnet快速构建tree网络
    Docker--Harbor私有仓库部署与管理
    QPaint绘制自定义仪表盘组件03
    【ARM Cache 系列文章 10 -- ARM Cortex-A720 Hunter 介绍】
    Flask框架——Flask-SQLite数据库
    人工智能底层自行实现篇3——逻辑回归(下)
    SpringBoot+若依+图片导出
    飞行动力学 - 第33节-螺旋模态机理 之 基础点摘要
  • 原文地址:https://blog.csdn.net/qq_61369552/article/details/136599820