coderforces 335B--Palindrome [字符串好题]

给出一个字符串s(长度小于50000),从中找出一个长度不超过100但尽可能长的回文子串(这里的子串不一定要连续的),任意输出一个即可。

codeforces的题目都有标签,这题不例外有个DP,便一开始就往这方面想。首先回文一定要左右“对称”,那么如果做动态规划,那么必须左右同时进行。一开始想记f(i,j)为i到j这个区间的最长回文串,但就是空间就已经超了。看到题目中找的最长只是100,能不能记其他状态呢?

后来想以f(i,j)表示从i开始,一定要找出长度为j的回文串(没有则是-1),该回文串的右端最左是多少。比如有一个字符串是cbcbaa(下标从0开始)。从0开始长度为2的回文串有c-c---、-b-b--、----aa(横线是为了方便看见回文串在原字符串的位置),它们右端下标分别为2、3、5,最小的是2。所以f(0,2)等于2。

那么状态转移方程:coderforces 335B 字符串好题 - lightsky - lightsky的oi

上面所说的查找可以用二分查找。时间复杂度为O(50000 * 100 * log2(50000) )。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值