一、Lyndon串的定义
一个非空字符串 ( s ) 称为 Lyndon串,当且仅当对于其所有真后缀 ( t )(即 ( t \neq s ) 且 ( t ) 是 ( s ) 去掉前若干字符后的子串),都有 ( s < t )(字典序比较)。
- 例:
"a"
、"ab"
、"abc"
是 Lyndon 串,而"aa"
、"abba"
不是(因为"aa"
的后缀"a"
不大于自身,"abba"
的后缀"bba"
小于原串)。
二、Lyndon分解的概念
Lyndon分解 是将一个字符串 ( s ) 唯一分解为若干 Lyndon 串的序列 ( s = w_1w_2\cdots w_k ),满足 ( w_1 \geq w_2 \geq \cdots \geq w_k )(字典序非递增)。
- 唯一性:根据 Schützenberger 定理,每个字符串的 Lyndon 分解是唯一的。
三、Duval 算法(线性时间分解)
Duval 算法是高效计算