Problem Description

正如大家知道的,女神喜欢字符串,而在字符串中,女神最喜欢回文字符串,但是不是所有的字符串都是回文字符串,但是有一些字符串可以进行“求导”来变成回文字符串。

字符串中只包含小写字母。
求导过程如下,C++:

string dif(const string x)
{
if(x.length()<=1)
return "";
string res="";
for(int i=1;i<x.length();++i)
res+=abs(x[i]-x[i-1])+'a';
return res;
}

C:

void dif(char*x,char*res)//注意有可能会溢出
{
if(x[0]==0||x[1]==0)
{
res[0]=0;
return;
}
int len=1;
for(int i=1;x[i];++i,++len)
res[i-1]=abs(x[i]-x[i-1])+'a';
res[len-1]=0;
}

例如"aa"的导字符串是“a",”aab“的导字符串是"ab","aacfwssg"的导字符串是"acdream"。

那么给定一个字符串,请判断在它各阶导字符串中,最长的回文串是多长?

二阶导字符串即为导字符串的导字符串。

n阶导字符串即为n-1阶导数的导字符串。

Input

多组数据,每组数据包括一个字符串s(1<=|s|<=1000)

Output

对于每组数据,输出一个整数

Sample Input

abcd
abcba
acdream

Sample Output

3
5
3

Hint

样例一,求一次导字符串后为”aaa“,最长回文子串就是本身,所以长度为3

样例二,本身就是回文串,因此,输出本身长度即可

样例三,acdream->cbonem->bnbji->mmib->aeh->ed->b

最长回文串长度分别为1,1,3,2,1,1,1,因此输出3

解题思路:

核心就是求最大回文串,但是又不是直接求的,是要求不停的求异后的最大回文串,这题就是由于数据不大,直接从本身到求异后,调用Manacher算法就可以找到最大回文串,然后求最大的就可以了!

AC代码:

#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
char ss[],s[],res[];
int p[]; void dif(char *s,char *res)
{
if(s[]==||s[]==)
{
res[]=;
return;
}
int len=;
for(int i=;s[i];++i,++len)
res[i-]=abs(s[i]-s[i-])+'a';
res[len-]=;
}
int Manacher(char *s)
{
int len = strlen(s), maxp = , ans = ;
for(int i = len; i >= ; i--)
{
s[i * + ] = s[i];
s[i * + ] = '#';
}
s[] = '*';
for(int i = ; i < * len + ; i++)
{
if(p[maxp] + maxp > i)
p[i] = min(p[ * maxp - i], p[maxp] + maxp - i);
else
p[i] = ;
while(s[i - p[i]] == s[i + p[i]])
p[i]++;
if(p[maxp] + maxp < i + p[i])
maxp = i;
if(ans < p[i])
ans = p[i];
}
return ans - ;
}
int main()
{
int max1;
while(gets(s))
{
max1=;
while(strlen(s)>)
{
memset(p,,sizeof(p));
strcpy(ss,s);
max1=max(max1,Manacher(ss));
dif(s,res);
strcpy(s,res);
if(max1>=strlen(s)) break;
}
printf("%d\n",max1);
}
return ;
}

[ACdream]女神教你字符串——导字符串的更多相关文章

  1. [ACdream] 女神教你字符串——三个气球

    Problem Description 女神邀请众ACdream开联欢会,显然作为ACM的佼佼者,气球是不能少的~.女神准备了三种颜色的气球,红色,黄色,绿色(交通信号灯?) 有气球还不能满足女神,女 ...

  2. [ACdream]女神教你字符串——违和感

    题目描述: 女神最喜欢字符串了,字符串神马的最有爱了. 女神是一个重度强迫症患者,面对不是对称的东西,她会觉得太违和了,就会爆炸.所以她手上的字符串都是回文的,像什么a,b,aabaa,abcba,上 ...

  3. JS字符串替换函数:Replace(“字符串1″, “字符串2″),

    JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...

  4. c#.net常用字符串函数 字符串常用方法

    RegionsStr = RegionsStr.Remove(RegionsStr.LastIndexOf(","), 1);   //去掉最后一个逗号 Compare 比较字符串 ...

  5. Javascript里,想把一个整数转换成字符串,字符串长度为2

    Javascript里,想把一个整数转换成字符串,字符串长度为2.  想把一个整数转换成字符串,字符串长度为2,怎么弄?比如 1 => "01"11 => " ...

  6. 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据

    第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...

  7. go golang 判断base64数据 获取随机字符串 截取字符串

    go golang 判断base64数据 获取随机字符串 截取字符串 先少写点,占个坑,以后接着加. 1,获取指定长度随机字符串 func RandomDigits(length int) strin ...

  8. jquery获取当前按钮、截取字符串、字符串拼接、动态循环添加元素

    截取字符串:字符串拼接:动态循环添加元素:获取当前按钮: {data : null, render: function(data, type, row ) { var loginName = $(&q ...

  9. 剑指offer 1,输入一个字符串,将字符串的空格替换成%20

    剑指offer 1,输入一个字符串,将字符串的空格替换成%20    function replaceSpace(str){      return str.replace(/\s/g,"% ...

随机推荐

  1. 【java】聊聊java里的接口

    接口的概念 java中的接口用于描述类应该具备什么样的功能,而不给出具体的实现,一个类可以“实现”多个接口 [注意]接口不是类,而是对类的一组描述   还是让我们通过一个例子来看看接口如何运作吧!   ...

  2. java.lang.RuntimeException: java.sql.SQLException: Too many parameters: expected 0, was given 1 Quer

    如果出现类似这样的错误,检查一下是否sql语句和参数的位置对调了. java.lang.RuntimeException: java.sql.SQLException: Too many parame ...

  3. showfm练习小项目总结

    Showfm 项目总结: 有一个主页面, 有一个service,启动和结束一般在主页面里面完成. OnCreate启动service OnDestroy关闭service EventBus 信息传递 ...

  4. mysql 1093错误

    1093错误:修改一个表的时候子查询不能是同一个表 解决办法:把子查询再套一层,变成原来表的孙子查询就可以了 例如: INSERT INTO gg SET id3=(SELECT c.a+1 FROM ...

  5. CSS 基本样式

    1.CSS 背景: css 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果 属性 描述 background-attachment 背景图像是否固定或者随着页面的其余部分滚动 backgr ...

  6. 上传本地项目到githup仓库

    1.在网上下载Git,然后安装 点击下一步 2.默认选择,下一步 3.选择使用命令行环境,下一步 4.后续步骤默认选择,点击下一步,等待安装完成 5.在githup上面新建一个仓库存放项目代码,具体方 ...

  7. 认识jQuery的Promise

    先前了解了ES6的Promise对象,来看看jQuery中的Promise,也就是jQuery的Deferred对象. 打开浏览器的控制台先. <script> var defer = $ ...

  8. Mysql 协议嗅探

    需求 监听通过网卡的所有mysql流量,进行解析,可在不影响现有业务情况下,进行入侵检测(IDS)或数据集成 协议要点 起初发现 用mysql-front访问数据库和mysql 的客户端访问时数据包格 ...

  9. vim环境设置(应用于python编程)

    1. 安装完整的vim # apt-get install vim-gnome 2. 安装ctags,ctags用于支持taglist,必需! # apt-get install ctags 3. 安 ...

  10. ZOJ2105 终于找到错误

    ZOJ2105:点击打开链接 错误代码 #include<stdio.h> #include<stdlib.h> int q[110]; int main() { int a, ...