C\C++最长回文子串
来源:互联网 发布:淘宝首页怎么加载数据 编辑:程序博客网 时间:2024/06/11 22:12
string pre(string s){
string p;
for (int i = 0; i < s.length(); i++){
p.insert(p.end(), '#');
p.insert(p.end(), s[i]);
}
p.insert(p.end(), '#');
return p;
}
int Manacher(string s){
int *p = new int[s.length()];
for (int i = 0; i < s.length(); i++){ p[i] = 0; }
int mx=1;//最长回文子串的边界
int id = 1;//最长回文子串中心点的位置
for (int i = 1; i < s.length()-1; i++){
if (mx>i){
if ((mx - i)>p[2 * id - i]){ p[i] = p[2 * id - i]; }
else{ p[i] = mx - i; }
}
else{ p[i] = 1; }
while (i-p[i]>=0&&i+p[i]<=s.length()-1){//使用的是string 所以要防止越界
if (s[i + p[i]] == s[i - p[i]]){ p[i]++; }
else{ break; }
}
if (i + p[i] > mx){ mx = i + p[i]; id = i; }
}
int res = 0;
for (int i = 0; i < s.length(); i++){
if (p[i]>res){
res = p[i];
}
}
return res-1;
}
string p;
for (int i = 0; i < s.length(); i++){
p.insert(p.end(), '#');
p.insert(p.end(), s[i]);
}
p.insert(p.end(), '#');
return p;
}
int Manacher(string s){
int *p = new int[s.length()];
for (int i = 0; i < s.length(); i++){ p[i] = 0; }
int mx=1;//最长回文子串的边界
int id = 1;//最长回文子串中心点的位置
for (int i = 1; i < s.length()-1; i++){
if (mx>i){
if ((mx - i)>p[2 * id - i]){ p[i] = p[2 * id - i]; }
else{ p[i] = mx - i; }
}
else{ p[i] = 1; }
while (i-p[i]>=0&&i+p[i]<=s.length()-1){//使用的是string 所以要防止越界
if (s[i + p[i]] == s[i - p[i]]){ p[i]++; }
else{ break; }
}
if (i + p[i] > mx){ mx = i + p[i]; id = i; }
}
int res = 0;
for (int i = 0; i < s.length(); i++){
if (p[i]>res){
res = p[i];
}
}
return res-1;
}
阅读全文
0 0
- 最长回文子串(C/C++)
- C\C++最长回文子串
- C语言最长回文子串
- [C++]LeetCode: 99 Longest Palindromic Substring (最长回文子串)
- c++-最长回文字符串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- CADsoft eagle文件转Altium Designer文件的两个脚本
- linux getopt()使用
- web.xml配置
- Android 好看的自定义滚动式日期选择控件
- 金蝶K3工程变更操作指南
- C\C++最长回文子串
- [数学杂题] LibreOJ #530「LibreOJ β Round #5」最小倍数
- Phpstorm 常用快捷键
- ANSI Common Lisp译本笔记8
- Linux下查看tomcat的版本信息
- Construct2 初体验
- MFC鼠标获取DEMO
- JavaScript学习注意点
- python中的深拷贝与浅拷贝