最小表示法
最小表示法
定义
求 。通俗地说,不断将字符串末尾的字符移到开头,得到的 个字符串中的字典序最小者即为字符串的 最小表示。
暴力求法
在得知 时使得 最小的 时,可以直接将其和 比较,得出 时使得 最小的 。虽然随机数据下表现良好,但是可以构造形如 的数据将其卡成 。
后缀数组
求出 的后缀数组,然后 中 最小者即为最小表示。证明显然。
做法
原理
令 ,若 且 (令 ),则 。也就是 , 均不会成为最小表示。
做法
仍然是维护当前的最小表示 和对应的集合 。比较 和 ,如果 ,则将 赋为 ,否则将 赋为 ,将 赋为 。
时间复杂度
模板代码
点此查看代码
#include <bits/stdc++.h> using namespace std; const int maxn=300010; inline int Md(int x){return x-(x>=n)*n;} int n,i,j,k,p; int a[maxn]; int main(){ scanf("%d",&n); for(i=0;i<n;++i) scanf("%d",a+i); i=0; for(j=1;j<n;++j){ k=0; while(k<=n&&a[Md(i+k)]==a[Md(j+k)]) ++k; if(a[Md(i+k)]>a[Md(j+k)]){ p=j; j=max(j,i+k); i=p; } else j=j+k; } for(j=0;j<n;++j) printf("%d ",a[Md(i+j)]); return 0; }
本文来自博客园,作者:Fran-Cen,转载请注明原文链接:https://www.cnblogs.com/Fran-CENSORED-Cwoi/p/16775662.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!