当前位置: 首页 > news >正文

141. 周期

Powered by:NEFU AB-IN

Link

文章目录

  • 141. 周期
    • 题意
    • 思路
    • 代码

141. 周期

  • 题意

    一个字符串的前缀是从第一个字符开始的连续若干个字符,例如 abaab 共有 5个前缀,分别是 a,ab,aba,abaa,abaab。
    我们希望知道一个 N位字符串 S的前缀是否具有循环节。
    换言之,对于每一个从头开始的长度为 i(i>1)的前缀,是否由重复出现的子串 A组成,即 AAA…A(A重复出现 K次,K>1)。
    如果存在,请找出最短的循环节对应的 K值(也就是这个前缀串的所有可能重复节中,最大的 K值)。

  • 思路

    循环节——KMP的经典应用

    一个字符串S的循环节长度为t 等价于 S[1,n−t]=S[t+1,n]S[1, n - t] = S[t + 1, n]S[1,nt]=S[t+1,n]
    题目求ttt的最小值,相当于求n−tn-tnt的最大值,也就是求最长的相等前后缀,也就是n−t=next[n]n - t = next[n]nt=next[n]
    也就是 t=n−next[n]t = n - next[n]t=nnext[n]

    所以此题,求出所有next[i]next[i]next[i]的,那么前i个字符串构成的前缀的循环节长度为i−next[i]i - next[i]inext[i]

  • 代码

    /*
    * @Author: NEFU AB-IN
    * @Date: 2023-02-24 12:23:39
    * @FilePath: \Acwing\141\141.cpp
    * @LastEditTime: 2023-02-26 09:53:59
    */
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #undef int#define SZ(X) ((int)(X).size())
    #define ALL(X) (X).begin(), (X).end()
    #define IOS                                                                                                            \ios::sync_with_stdio(false);                                                                                       \cin.tie(nullptr);                                                                                                  \cout.tie(nullptr)
    #define DEBUG(X) cout << #X << ": " << X << '\n'
    typedef pair<int, int> PII;const int N = 1e6 + 10, INF = 0x3f3f3f3f;
    int ne[N];signed main()
    {int T = 1;int n;string s;while (cin >> n, n){cin >> s;s = " " + s;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;}printf("Test case #%d\n", T++);for (int i = 1; i <= n; ++i){int t = i - ne[i];if (i % t == 0 && i / t > 1){cout << i << " " << i / t << '\n';}}printf("\n");}return 0;
    }
    
http://www.lryc.cn/news/20860.html

相关文章:

  • Windows下命令执行绕过技巧总结(渗透测试专用)
  • mindspore的MLP模型(多层感知机)
  • 【论文极速读】VQ-VAE:一种稀疏表征学习方法
  • Flask-Blueprint
  • png图片转eps格式
  • English Learning - L2 语音作业打卡 Day2 2023.2.23 周四
  • 低频量化之 可转债 配债 策略数据 - 全网独家
  • 论文阅读_DALLE-2的unCLIP模型
  • 软件测试5年,历经3轮面试成功拿下华为Offer,24K/16薪不过分吧
  • 【软件工程】课程作业(三道题目:需求分析、概要设计、详细设计、软件测试)
  • 05 DC-AC逆变器(DCAC Converter / Inverter)简介
  • 带你深层了解c语言指针
  • 2-MATLAB APP Design-下拉菜单栏的使用
  • 七、HTTPTomcatServlet
  • LeetCode 热题 C++ 198. 打家劫舍
  • C语言学习笔记——程序环境和预处理
  • 「JVM 高效并发」Java 内存模型
  • C语言刷题(2)——“C”
  • 第一个 Spring MVC 注解式开发案例(初学必看)
  • openresty学习笔记
  • 微信小程序DAY3
  • 【CAN】手把手教你学习CAN总线(一)
  • JUC 体系的基石——AQS
  • Qt中信号与槽的使用
  • 力扣-销售员
  • HTML综合案例练习
  • MySQL运维
  • 【网络原理10】构造HTTP请求、HTTPS加密
  • Allegro如何锁定报表界面操作指导
  • 基于STM32的微型电子琴设计