lyndon word 学习笔记&
Lyndon Word:
定义:对于字符串𝑠,若𝑠的最小后缀为其本身,那么称𝑠为Lyndon串
等价性:𝑠为Lyndon串等价于𝑠本身是其循环移位中最小的一个
**重要性质: 任意字符串𝑠都可以分解为𝑠=𝑠1𝑠2…𝑠𝑘,其中∀𝑠𝑖为Lyndon串且𝑠𝑖⩾𝑠𝑖+1。且这种分解方法是唯一的 **
---------------------------------------------------------------------
Lyndon的分解:Duval算法
该算法可以在𝑂(𝑛)的时间内求出串𝑠的Lyndon分解
lyndon 分解
#include<bits/stdc++.h>
using namespace std;
const int MAXN = (1 << 21) + 1;
char s[MAXN];
int main() {
scanf("%s", s + 1);
int N = strlen(s + 1), j, k;
for(int i = 1; i <= N;) {
j = i; k = i + 1;
while(k <= N && s[j] <= s[k]) {
if(s[j] < s[k]) j = i;
else j++;
k++;
}
while(i <= j) {
printf("%d ", i + k - j - 1);
i += k - j;
}
}
return 0;
}
.
.
.
.
参考自为风月马前卒
不以物喜,不以己悲
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步