[14/07/19] 字符串学习笔记(1)

循环节相关。

  解决此类问题一般有两种方法。

  KMP

  我们知道,对于 \(KMP\) 算法而言,\(nxt[i]\) 要记录的是区间 \([1,i-1]\) 的最长共同前后缀。那么对于 \(nxt[]\) 中的 \(i\),若符合 \(i\) % \(( i - nxt[i] ) == 0\)\(nxt[i] != 0\) , 则说明字符串循环,而且循环节长度为: \(i-nxt[i]\)

  哈希

  把串复制两遍,设枚举到的循环节为 \(x\) ,匹配 \([L,R-x-1]\)\([L+x+1,R]\) 是否相等。因为 \([L+x+1,R-x-1]\) 为重复,所以实则就是匹配了 \([L,L+x]==[L+x+1,L+2x+1]\),以此类推。

猜你喜欢

转载自www.cnblogs.com/alexiswithlucifer/p/11183112.html
今日推荐