coderforces 335B--Palindrome [字符串好题]
2014-04-06 13:05
302 查看
给出一个字符串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。
那么状态转移方程:
上面所说的查找可以用二分查找。时间复杂度为O(50000 * 100 * log2(50000) )。
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。
那么状态转移方程:
上面所说的查找可以用二分查找。时间复杂度为O(50000 * 100 * log2(50000) )。
相关文章推荐
- 【AtCoder CODE FESTIVAL 2017 qual C】D - Yet Another Palindrome Partitioning (状压dp 字符串)
- 文章标题 Coderforces 689B : Mike and Shortcuts (BFS)
- codeforces Coder-Strike 2014 Round 1 B题解题报告
- 找到包含"Coder"的字符串
- Coderforces Rockethon 2014 Trial Contest: Testing Round #10 A2. Skis
- coderforce Educational Codeforces Round 6 E.New Year Tree
- (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)
- Codeforces/TopCoder/ProjectEuler/CodeChef 散题笔记 (持续更新)
- Coderforces 508B 简单贪心
- AtCoder Regular Contest 081 E - Don't Be a Subsequence(字符串DP)
- Codeforces Round 40 (Rated for Div. 2) B 字符串 不互用字符字串问题
- coderforces-755-C PolandBall and Forest(简单并查集)
- coderforces 218 DIV2
- 利用Manacher算法寻找字符串中的最长回文序列(palindrome)
- coderforces 701A Cards
- coderforces--418div2 B. An express train to reveries
- Coderforces Twins
- Coder-Strike 2014 - Qualification Round A. Password Check(简单字符串)
- Educational Codeforces Round 9 C. The Smallest String Concatenation —— 贪心 + 字符串
- Coderforces Insomnia cure