作用:求一个字符串中的最长子串,同时还可以求所有子串的长度。

题目链接:

https://vjudge.net/contest/254692#problem/B

最长回文串长度的代码:

 int  Manacher(string s)
{
string t = "$#";
for (int i = ; i < s.size(); ++i)
{
t += s[i];
t += "#";
}
vector<int> p(t.size(), );
int maxx=;
int mx = , id = , resLen = , resCenter = ;
for (int i = ; i < t.size(); ++i)
{
// maxx=max(maxx,p[i]);
p[i] = mx > i ? min(p[ * id - i], mx - i) : ;
while (t[i + p[i]] == t[i - p[i]])
++p[i];
if (mx < i + p[i])
{
mx = i + p[i];
id = i;
}
if (resLen < p[i])
{
resLen = p[i];
resCenter = i;
}
maxx=max(maxx,p[i]);
}
return maxx-;
}

代码:

 #include<bits/stdc++.h>
using namespace std;
# define maxn +
char str1[maxn];
char str2[maxn*];
int p[maxn*];
int l=;
int ma()
{
int id=,mx=;
int ans=;
str2[l]='\0';
for(int i=; i<l+; i++)p[i]=;
for(int i=; i<l; i++)
{
if(i<mx)p[i]=min(p[*id-i],mx-i);
else p[i]=;
while(str2[i-p[i]]==str2[i+p[i]])
p[i]++;
if(mx<i+p[i])
{
id=i;
mx=i+p[i];
}
ans+=p[i]/;
}
return ans;
}
int main()
{
int n;
scanf("%d",&n);
scanf("%s",str1);
str2[l++]='$';
str2[l++]='#';
for(int i=; i<n; i++)
{
if(str1[i]=='-')
{
if(l-!=)l-=;
}
else
{
str2[l++]=str1[i];
str2[l++]='#';
}
printf("%d",ma());
if(i!=n-)printf(" ");
}
printf("\n");
return ;
}

 上面这个版本的manacher在处理多组输入的时候不如下面这个省时间。

 void Manacher(int n)
{
int i, id=, len=; Estr[] = '$'; for(i=start[n]; i<start[n+]; i++)
{
Estr[len++] = '#';
Estr[len++] = MumStr[i]; suffix[i] = false;
prefix[i] = false;
}
Estr[len] = '#';
Estr[len+] = ; for(i=; i<len; i++)
{
p[i] = ; if(p[id]+id > i)
p[i] = min(p[id*-i], p[id]+id-i); while(Estr[ i+p[i] ] == Estr[ i-p[i] ])
p[i]++; if(p[id]+id < p[i]+i)
id = i;
}
}

最新文章

  1. 点击空白处 div隐藏掉了
  2. springboot+solr
  3. UMLl类图实例
  4. swipejs的bug
  5. Oracle 自连接 / 外连接 / 子查询
  6. paramiko SSH 模块简单应用。
  7. jQuery.YesShow - 图片轮播插件(带图片放大功能)
  8. 使用Reporting Service订阅对域外用户发邮件
  9. 在Windows XP下手动安装Apache+MySQL+PHP环境 要点
  10. WebApiContrib
  11. Bootstrap3.0学习第三轮(栅格系统案例)
  12. ⑤bootstrap表格使用基础案例
  13. linux学习笔记-shell-script相关知识
  14. java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
  15. Oracle查看SQL执行计划的方式
  16. 决策树之Cart算法一
  17. DBUnit使用介绍
  18. Maven打可执行包的pom.xml配置
  19. [转]基于Visual Studio 2010 进行敏捷/Scrum模式开发
  20. 【数位dp入门】【HDU2089】62

热门文章

  1. pycharm 调试 scrapy
  2. Spring sprint @ first day
  3. 小组成员及其git链接
  4. vsphere web client 使用中文的解决办法
  5. [From WIKI] IBM Z
  6. USACO 2012 December ZQUOJ 24128 Wifi Setup(动态dp)
  7. ESLint的使用
  8. 洛谷P4301 [CQOI2013]新Nim游戏
  9. c++ std::function
  10. oracle无法通过IP地址进行连接