5.Longest Palindromic Substring (String; DP, KMP)
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
思路I:动态规划,遍历到i的时候要保证之前的元素都已经计算过状态,所以遍历顺序同插入排序,时间复杂度O(n2)
class Solution {
public:
string longestPalindrome(string s) {
int len = s.length();
if(len==) return s;
bool dp[len][len]={false};
int maxLen=;
int start=;
//initialize
for(int i = ; i < len; i++){
dp[i][i]=true;
}
for(int i=; i<len; i++){
for(int j = ; j<i; j++){
if(s[i]==s[j] && (j==i- || dp[j+][i-])){
dp[j][i]=true;
if(i-j+ > maxLen){
maxLen=i-j+;
start=j;
}
}
}
}
return s.substr(start, maxLen);
}
};
思路II:KMP,一种字符串匹配方法。

- If P[ i ] ≤ R – i, we set P[ i ] to P[ i' ] which takes exactly one step.
- Otherwise we attempt to change the palindrome’s center to i by expanding it starting at the right edge, R. Extending R (the inner while loop) takes at most a total of N steps, and positioning and testing each centers take a total of N steps too. Therefore, this algorithm guarantees to finish in at most 2*N steps, giving a linear time solution.
那么总共时间复杂度最坏是O(n2),最好是O(n)
class Solution {
public:
string preProcess(string s) {
int n = s.length();
if (n == ) return "^$";
string ret = "^"; //开始符^
for (int i = ; i < n; i++)
ret += "#" + s.substr(i, );
ret += "#$"; //结束符$
return ret;
}
string longestPalindrome(string s) {
string T = preProcess(s);
int n = T.length();
int *P = new int[n]; //状态数组长度等于原来字符串的长度,不用给#计算状态
int C = , R = ;
for (int i = ; i < n-; i++) {
int i_mirror = *C-i; // equals to i_mirror = C - (i-C)
//if p[i_mirror] < R-i: set p[i] to p[i_mirror]
P[i] = (R > i) ? min(R-i, P[i_mirror]) : ;
//else: Attempt to expand palindrome centered at i
while (T[i + + P[i]] == T[i - - P[i]]) //因为有哨兵^$所以不用担心越界; +1, -1检查下一个元素是否相等,若相等,扩大p[i]
P[i]++;
//if the palindrome centered at i does expand past R
if (i + P[i] > R) {
C = i;
R = i + P[i];
}
}
// Find the maximum element in P.
int maxLen = ;
int centerIndex = ;
for (int i = ; i < n-; i++) {
if (P[i] > maxLen) {
maxLen = P[i];
centerIndex = i;
}
}
delete[] P;
return s.substr((centerIndex - - maxLen)/, maxLen);
}
};
5.Longest Palindromic Substring (String; DP, KMP)的更多相关文章
- 5. Longest Palindromic Substring (DP)
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- Leetcode:【DP】Longest Palindromic Substring 解题报告
Longest Palindromic Substring -- HARD 级别 Question SolutionGiven a string S, find the longest palindr ...
- 5. Longest Palindromic Substring(最长回文子串 manacher 算法/ DP动态规划)
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- *5. Longest Palindromic Substring (dp) previous blogs are helpful
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- LeetCode第[5]题(Java):Longest Palindromic Substring 标签:String、动态规划
题目中文:求最长回文子串 题目难度:Medium 题目内容: Given a string s, find the longest palindromic substring in s. You ma ...
- 【LeetCode】Longest Palindromic Substring 解题报告
DP.KMP什么的都太高大上了.自己想了个朴素的遍历方法. [题目] Given a string S, find the longest palindromic substring in S. Yo ...
- [LeetCode] Longest Palindromic Substring 最长回文串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- Leetcode Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- 【leedcode】 Longest Palindromic Substring
Given a , and there exists one unique longest palindromic substring. https://leetcode.com/problems/l ...
随机推荐
- 学习笔记之YAML
The Official YAML Web Site http://yaml.org/ YAML(tm) is an international collaboration to make a dat ...
- PHP-Socket服务端客户端发送接收通信实例详解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fighter.blog.51cto.com/1318618/1533957 So ...
- javascript创建对象之构造函数模式(二)
对上一章节的工厂模式进行代码重写 function Human(name, sex) { this.name = name; this.sex = sex; this.say = function ( ...
- 基于标准库实现string和wstring的转换
// convert string to wstring std::wstring to_wstring(const std::string& str, const std::locale&a ...
- 生存分析与R
生存分析与R 2018年05月19日 19:55:06 走在码农路上的医学狗 阅读数:4399更多 个人分类: R语言 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- rhel7配置yum的方法
参考网站:https://www.cnblogs.com/haoyufeng/p/4393005.html rhel的版本号:::::::::: [root@LinuxS04 yum.repos.d] ...
- spring boot 整合MongoDB
参考 https://www.cnblogs.com/nbfujx/p/7999171.html
- leetcode350
public class Solution { public int[] Intersect(int[] nums1, int[] nums2) { var len1 = nums1.Length; ...
- eclipse中build path与Web Deployment Assembly的作用,区别
转自:https://blog.csdn.net/heart_mine/article/details/79402792 以下内容只为做个笔记记录已下,有问题可以留言,欢迎补充. 今天在eclipse ...
- BDE 退出历史 迁移至FireDAC
BDE组件套TQuery\TTable\TStoreProce结束历时使命. ADO组件套也停止更新, 将来是FireDAC组件套的江湖 Migrating BDE Applications to F ...