闲扯
这道题不是一个字符串 $hash$ 的题吗,为啥题解全部都是区间 $DP$ 求回文串。。。
题面
UVA11584 划分成回文串 Partitioning by Palindromes
Solution
我们先不考虑回文串的问题,考虑怎么求解这个问题。
显然,我们设 $dp_i$ 表示前 $i$ 位最少能被划分为几个回文串,那么很容易写出以下方程: $dp_i=\min\limits_{j=0,check(j+1,i)}^{i-1}(dp_j+1)$ 。其中 $check(l,r)$ 表示 $l\sim r$ 是一个回文串。
那么我们只需要求出每一个子段是不是一个回文串即可。
其他题解都是用的区间 $DP$ 来求解,或者直接暴力判,然而我们是可以在 $O(n)$ 的时间复杂度里处理出来的。
我们考虑字符串 $hash$ 。
对一个字符串,我们正向求一遍 $hash$ ,反向求一遍 $hash$ 。(不会的同学可以去做一下模板题)
查询时,我们计算出这一段正向的 $hash$ 值和反向的 $hash$ 值,判断是否相等即可。
时间复杂度: $O(n^2)$ 。
空间复杂度: $O(n)$ 。
Code
1 |
|
总结
感觉大家都是看刘汝佳的蓝书过来的。。。
也不能只有区间 $DP$ 一种做法对吧,还是拓展一下思路好些。