最小表示法学习小记
定义循环同构串——当字符串S中选定一个位置i满足S[i~n]+S[1-i-1]=T,最小表示发用来找到字符串中最小字典序的循环同构串。
类似KMP的思想。先破环成链,然后三指针比较。重点在于若 则 ,这一点将算法优化了很多。
模板题:
#include <bits/stdc++.h>
using namespace std;
int s[600005], n;
int zxbsf()
{
for (int i = 1; i <= n; i++) {
s[i + n] = s[i];
}
int i = 1, j = 2, k = 0;
while (i <= n && j <= n) {
for (k = 0; k <= n && s[i+ k] == s[j + k]; k++);
s[i + k] > s[j + k] ? i = i + k + 1 : j = j + k + 1;
if (i == j) j ++;
}
return min(i,j);
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
int k = zxbsf();
for (int i = 0; i < n; i++) {
cout << s[i + k] << " ";
} cout << endl;
return 0;
}
每次向后扫描 的长度,则 或 ,最多向后移动 的长度,所以时间复杂度是 的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!