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. 2015211230108《Java程序设计》第10周学习总结

    1. 本周学习总结 2. 书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? finally的作用: 1.确定程序 ...

  2. Junit4学习(五)Junit4测试套件

    一,背景 1,随着开发规模的深入和扩大,项目或越来越大,相应的我们的测试类也会越来越多:那么就带来一个问题,假如测试类很多,就需要多次运行,造成测试的成本增加:此时就可以使用junit批量运行测试类的 ...

  3. Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群生产部署

    6.1.平台特定使用的二进制文件配置 该方案与Hyperledger Fabric 1.0 从零开始(五)--运行测试e2e类似,根据企业需要,可以控制各节点的域名,及联盟链的统一域名.可以指定单独节 ...

  4. 纳税服务系统【异常处理、抽取BaseAction】

    前言 本博文主要讲解在项目中异常是怎么处理的.一般我们都不会直接把后台异常信息返回给用户,用户是看不懂的.让用户看见一大串的错误代码,这是不合理的.因此我们需要对报错进行处理. 我们在开发的时候是使用 ...

  5. kettle工具实现报表导出的初步搭建

    1.下载kettle 国外网站:http://kettle.pentaho.org/需要FQ,下载慢 2.下载完成启动(windows)-->spoon.bat 3.进入界面,两个主要的tab页 ...

  6. showfm练习小项目总结

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

  7. MVC查询数据接收及校验

    本来想写一篇aspx的TreeView控件绑值的文章的,在写案例的时候,写了一半,发现有些地方还得考虑以下,就留待下次了. 这一篇的话,是最近在开发一个项目的时候,有大量的页面和数据表,需要花式查询, ...

  8. 这是一名Java学者关于学习方向的建议

    无可厚非,编程是一门艺术.但是辉煌的背后必须是一段辛苦的奋斗过程,而过程的引导方向就是最重要的一环.Java语言可谓是引领了编程的潮流,你会是怎样去学的呢? 这是一名Java学者的学习方向的建议 注: ...

  9. [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API

    我们接着上文[js高手之路] html5 canvase系列教程 - 认识canvas以及基本使用方法继续. 一.直线的绘制 cxt.moveTo( x1, y1 ): 将画笔移动到x1, y1这个点 ...

  10. Vuforia开发完全指南---License Manager和Target Manager详解

    License Manager和Target Manager License Manager 对于每一个用Vuforia开发的AR程序来说,都有一个唯一的license key,在Unity中必须首先 ...