题面
大意:求出添加尽可能少的字符数量使得原串成为循环串.
比如abca->abcabc
要2个字符.
分析
KMP找循环节!fail
数组的巧用
比如说题目中这样的串abca
的fail
数组为[0,0,0,1].也就是说最后一位为1其他均为0.
我们根据fail数组的定义就很容易推出答案
1.如果fail[len]为0,也就是说没有任何的匹配.就是原字符串长度.
2.如果fail[len]不为0,我们用len-fail[len]得到一个循环节.然后如果这个循环节是len的因子.也就是恰好出现了循环.那么不要添加任何的字符,return 0.否则返回该添加的量.也就是循环长度减去存在的残缺循环长度
具体代码说明一切.
代码
1 |
|