codeforces Palindromic characteristics(hash或者dp)

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。

代码参考:

https://github.com/wuli2496/OJ/blob/master/codeforces/835D%20Palindromic%20characteristics/Palindromic%20characteristics(hash).java

猜你喜欢

转载自blog.csdn.net/wuli2496/article/details/121387400