1、动态规划
用dp(l,r)表示子串s[l..r]的回文串阶数。对于长度len为1的有dp(l,r)=1。对于长度len等于2的,看字符串左右是否相等即可。当r-l>1时,如果s[l]不等于s[r]或者dp(l+1,r-1)等于0时, dp(l,r)=0,其他则dp(l,r)=dp(l,m)+1,其中m=l+len/2 -1。
代码参考:
OJ/Palindromic characteristics(dp).java at master · wuli2496/OJ · GitHub
2、hash+动态规划
先求出字符串对应前缀哈希及后缀哈希以及以对应的指数值。在计算子字符串的回文串阶数时,逐次增加长度。在计算dp(l,r)时,比较左半及右半字符串的哈希值是否相等,如果相等,则将对应的阶数+1。
代码参考: