这里最重要的是:dp数组对应的就是[i,j]是否为回文,这个性质很适合做母题
dp
思路真的很简单:a--b如果是,那么a+1--b-1也会是
所以这就是状态转移
另外再需要考虑的就是边界和遍历方式
- i+1,j-1要有效,也就是起码2,必须j-1>i+1
- 在二维中是左下,所以按列来遍历会比较好
升级 分隔的最小次数
思路也不难
f[i]代表i需要的次数
0-----j-----i
可以发现,只要j+1 到 i为回文串 ,那么就有 f[i]=f[j]+1;
这里的关键是:我们根本不关心f[j]怎么来的
if(0到i回文) f[i]=0
for(j从0到i-1){
if(j+1到i回文){
f[i]=f[j]+1;
}
}
dp 感悟:只注重怎么从小的得到dp[i],而不要注重条件
这里的if中用到了i+1,看着有点吓人
网友评论