首页 > 其他分享 >最小循环节——题解

最小循环节——题解

时间:2024-07-26 11:59:34浏览次数:5  
标签:前缀 题解 最小 next 循环 字符串 我们 定义

最小循环节

题目链接

题意简述

我们需要找到一个字符 \(s\) 的最短的循环节,对循环节的定义为,当一个字符串 \(t\) 能够通过若干次自己加自己得到字符串 \(s\) ,我们就称 \(t\) 是 \(s\) 的一个循环节。

思路简述

根据题意,字符串 \(s\) 本身就是自己的一个循环节。所以,当我们找不到更小的循环节时,我们就可以输出 \(n\) 。

接下来,我们就要找到比 \(s\) 本身更短的循环节,考虑 \(KMP\) 中对 \(next\) 数组的定义,它记录了一个字符串每一个前缀的 \(border\) ,我们会惊奇的发现,这个定义与循环节的定义有异曲同工之妙。

假设 \(s\) 的最短循环节的长度,就是 \(next_|s_|\) ,这貌似是对的,但我们仍能举出反例,如:

\[ abababab \to next_|s_| \to 6 \to error \]

这个样例的循环节应该是 \(ab\) ,长度应该是 \(2\)。

我们继续观察对 \(next\) 数组的定义,发现,他记录的是每一个前缀的 \(border\) 是关于真前缀与真后缀的,即不可能是这个前缀本身。所以,我们就可以考虑

标签:前缀,题解,最小,next,循环,字符串,我们,定义
From: https://www.cnblogs.com/optimist-skm/p/18325011

相关文章

  • 使用React脚手架时npx速度慢的问题解决
    React作为目前最流行的前端框架之一,其开发效率和组件化特性受到了开发者的广泛欢迎。然而在使用React脚手架工具,如create-react-app进行项目初始化时,有时会遇到npx命令执行速度非常慢的问题。本文将探讨这一问题的原因,并提供一些有效的解决方案。问题分析npx是Node.js包管......
  • 多个箱线图,其中包含 for 循环保存输出中文件的数据?
    我正在使用保存在要绘制箱线图的文件中的一些数据。每个文件(第3行)中有27个值,每个文件我希望成为沿x轴5'的单独箱线图然后,我还希望将每个文件作为单个箱线图进行概述,因为我有10个“对象”(使用所有5个文件27个值(135个值)作为单个箱线图)我已经开始在代码......
  • P9304 「DTOI-5」3-1题解,c++树的遍历例题
    题意给定以n(1≤n≤1......
  • 题解:P10570 [JRKSJ R8] 网球(未成功)
    题目链接博客食用更佳:Myblog。这道题不是很难。提交记录分析:\(A\)每转\(a\)圈,\(B\)就转\(b\)圈,不考虑\(c\)的前提下,可知每个齿轮转了\([a,b]\)个齿,\(A\)有\([a,b]\diva\)个齿,\(B\)有\([a,b]\divb\)个齿,接着扩倍扩到都大于\(c\)。拓展:\[[a,b]=......
  • 题解:P10721 [GESP202406 六级] 计算得分(未成功)
    博客食用更佳:Myblog题目传送门分析:这道题是一个标准的dp。我们可以先预处理多个\(\texttt{abc}\)连成的字符串的最大值,之后可以按最长平台的方法处理。步骤:初值:这题不需要赋值,因为题目保证得分是正的,故初值为\(0\)。状态:\(dp_i\)表示连续\(i\)个\(\texttt{abc......
  • Redis缓存面试问题解析:如何有效管理缓存失效策略?
    在技术面试中,Redis缓存是一个常见的话题。面试官往往会考察候选人对缓存机制的理解以及在实际场景中的应用能力。本文将探讨一个在Redis缓存面试中经常被问到的问题,并深入解析其背后的概念和解决方案。面试问题:如何管理Redis缓存的失效策略?问题描述:在高并发的web应用中,缓存是提......
  • 题解:P10043 [CCPC 2023 北京市赛] 广播
    博客使用更佳:Myblog题目传送门这道题是一个标准的dp了,只不过它要倒序来做。还是分三步。初值:初值想必都知道吧,若要求最小值,就把初值设成无穷大,\(dp_{0,i}\)和\(dp_{i,0}\)都要设成\(i\),\(dp_{0,0}\)一定要赋值成\(0\),这是本人亲自犯过的错误QwQ。状态:\(dp_{i,j}......
  • AtCoder Beginner Contest 360 题解(C-E)
    C-MoveIt题目链接:C-MoveIt题目大意:有\(N\)个盒子和\(N\)个物品编号为\(1-N\),物品\(i\)在盒子\(A_i\)中,重量为\(W_i\),你可以进行一种操作将盒子中的一件物品移动到其他任意盒子中,代价为\(W_i\),求使得所有盒子中只存在一件物品的最小操作代价。题解:贪心,可以发现......
  • 双 for 循环的 Pythonic 方式
    我有以下代码:importnumpyasnpepsilon=np.array([[0.,0.00172667,0.00071437,0.00091779,0.00154501],[0.00128983,0.,0.00028139,0.00215905,0.00094862],[0.00035811,0.00018714,0.,0.00029365,0.00036993......
  • CF1843F2 题解
    题面注意到边权只有\(1,-1\),所以有结论:存在值为\(v\)的子段当且仅当\(v\in[\)最小子段和,最大子段和\(]\)。证明:因为移动区间端点,区间和变化连续(+1/-1),从最小子段移动到最大子段,子段和一定经过\(v\),所以得证。于是只要树剖维护最小最大子段和即可。和线段树上维护的数据......