当地时期
接受一个非空字符串s。所述本地周期的小号在索引我是最小的正整数Ñ,对于每个这样的0≤ķ<N ,我们有S [I + K] = S [I-N + K]每当两侧限定。可替代地,它是一个非空字符串的最小长度瓦特使得如果级联WW被放在旁边小号使得的第二拷贝瓦特开始于索引我的小号,那么这两个字符串同意任何地方重叠。
例如,让我们计算(基于0的)索引2 的s =“ abaabbab”的本地周期。
- 尝试n = 1:然后s [2 + 0]≠s [2-1 + 0],因此此选择不正确。
- 尝试n = 2:然后s [2 + 0] = s [2-2 + 0]但s [2 + 1]≠s [2-2 + 1],所以这也不正确。
- 尝试n = 3:然后未定义s [2 + 0-3],s [2 + 1] = s [2-3 + 1]和s [2 + 2] = s [2-3 + 2]。因此,本地期间为3。
这是使用第二个定义的本地时间段的可视化,为了清楚起见,在w的两个副本之间添加了分号:
index a b a a b b a b period
0 a;a 1
1 b a;b a 2
2 a a b;a a b 3
3 a;a 1
4 b b a b a a;b b a b a a 6
5 b;b 1
6 a b b;a b b 3
7 b a;b a 2
请注意,w不一定是s的子字符串。这是在index-4情况下发生的。
任务
您的输入是小写ASCII字符的非空字符串s。如果需要,可以将其视为字符列表。您的输出应为在每个索引处包含s的本地周期的列表。在上面的示例中,正确的输出应为[1,2,3,1,6,1,3,2]。
每种语言的最低字节数为准。标准代号适用规则。
测试用例
a -> [1]
hi -> [1, 2]
www -> [1, 1, 1]
xcxccxc -> [1, 2, 2, 5, 1, 3, 2]
abcbacb -> [1, 4, 7, 7, 7, 3, 3]
nininini -> [1, 2, 2, 2, 2, 2, 2, 2]
abaabbab -> [1, 2, 3, 1, 6, 1, 3, 2]
woppwoppw -> [1, 4, 4, 1, 4, 4, 4, 1, 4]
qwertyuiop -> [1, 10, 10, 10, 10, 10, 10, 10, 10, 10]
deededeededede -> [1, 3, 1, 5, 2, 2, 5, 1, 12, 2, 2, 2, 2, 2]
abababcabababcababcabababcaba -> [1, 2, 2, 2, 2, 7, 7, 7, 7, 2, 2, 2, 19, 19, 5, 5, 2, 5, 5, 12, 12, 2, 2, 2, 7, 7, 5, 5, 2]
;
示例中的位置)。这将摆脱领先1
qwertyuiop
qwertyuiop