如果一个字符串正着读和倒着读是一样的,则称它是回文的。

给定一个长度为N的字符串S,求他的最长回文子串的长度是多少。

输入格式

输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个小写字符的形式给出。

输入以一个以字符串“END”(不包括引号)开头的行表示输入终止。

输出格式

对于输入中的每个测试用例,输出测试用例编号和最大回文子串的长度(参考样例格式)。

每个输出占一行。

输入样例:

abcbabcbabcba
abacacbaaaab
END

输出样例:

Case 1: 13
Case 2: 6
题目:让你找出最长的回文子串 思路:
朴素算法 O(n^2)
枚举中点,然后分奇数长度串,偶数长度串,第二层循环来枚举长度是否可以
哈希做法 O(nlogn),可优化为O(n)
我们知道哈希可以直接判断字符串是否相等,对于回文的情况我们可以正着求一遍哈希,然后反着再求一边哈希,我们就可以判断任意一个区间是否是回文串
只是我们不确定长度,这里我们可以照着上面的思路,枚举中点,然后二分长度,直接判断是否是回文串。
!!!注意,这里不同上面朴素做法的,上面是必须确定前面才能确定后面是否可以,所以长度必须从1开始遍历,所以我们其实可以省去二分,直接每到新的位置,我们直接从当前最大值+1开始枚举,这样
即时O(n)写法
马拉车算法 O(n)
还没学,菜鸡在此告辞 这里给上我写的哈希做法
#include<bits/stdc++.h>
#define maxn 1000005
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
char str[maxn];
ull dp1[maxn],f[maxn];
ull dp2[maxn];
ll len;
void hash_code()
{
memset(f,,sizeof(f));
memset(dp1,,sizeof(dp1));
memset(dp2,,sizeof(dp2));
len=strlen(str+);
f[]=;
for(int i=;i<=len;i++){
dp1[i]=dp1[i-]*+str[i]-'a'+;
f[i]=f[i-]*;
}
for(int i=len;i>=;i--){
dp2[i]=dp2[i+]*+str[i]-'a'+;
}
}
int main(){
ll num=;
while(scanf("%s",str+)!=EOF){
if(strcmp(str+,"END")==) break;
hash_code();
/*int l,r;
while(1)
{
cin>>l>>r;
if(dp1[r]-dp1[l-1]*f[r-l+1]==dp2[l]-dp2[r+1]*f[r-l+1]){
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}*/
ll mx1=,mx2=;
for(int i=;i<=len;i++){
for(int j=mx1+;j<=len;j++){
if(i+j>len||i-j<=) break;
if(dp1[i+j]-dp1[i-j-]*f[*j+]!=dp2[i-j]-dp2[i+j+]*f[*j+]) break;
mx1++;
}
for(int j=mx2+;j<=len;j++){
if(i+j>len||i-j+<=) break;
if(dp1[i+j]-dp1[i-j]*f[*j]!=dp2[i-j+]-dp2[i+j+]*f[*j]) break;
mx2++;
}
//printf("%lld:%lld\n",i,mx1+1);
}
printf("Case %lld: %lld\n",num++,max(*mx1+,*mx2));
}
}

AcWing 139. 回文子串的最大长度 hash打卡的更多相关文章

  1. AcWing:139. 回文子串的最大长度(字符串Hash + 前缀和 + 后缀和 + 二分)

    如果一个字符串正着读和倒着读是一样的,则称它是回文的. 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少. 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个 ...

  2. 139. 回文子串的最大长度(回文树/二分,前缀,后缀和,Hash)

    题目链接 : https://www.acwing.com/problem/content/141/ #include <bits/stdc++.h> using namespace st ...

  3. 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297

    1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...

  4. hiho一下 第一周 最长回文子串

    时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这 ...

  5. 九度OJ 1252:回文子串 (字符串处理、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:387 解决:224 题目描述: 输入一个字符串,输出该字符串中对称的子字符串的最大长度. 比如输入字符串"google" ...

  6. 九度oj 题目1252:回文子串

    题目描述: 输入一个字符串,输出该字符串中对称的子字符串的最大长度. 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4. 输入: 存在多组数据,每组数据一行字 ...

  7. manacherO(n)求最长回文子串 hihocoder1032

    原文地址:https://segmentfault.com/a/1190000003914228   http://blog.csdn.net/synapse7/article/details/189 ...

  8. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  9. 最大长度回文子串(Manacher's algorithm)

    输出最大长度的回文子串. string longestPalindrome(string s) { int id, mx, i, j, len, maxlen; vector<char> ...

随机推荐

  1. 【LeetCode 34】在排序数组中查找元素的第一个和最后一个位置

    题目链接 [题解] 二分某个数的上下界. 其实这个方法并不难. 只要你想清楚了二分最后一次执行的位置在什么地方就不难了. [代码] class Solution { public: vector< ...

  2. 最新最全最详细的MacOS 10.14 Mojave黑苹果安装教程

    图文教程知乎地址:点击打开链接 视频教程B站地址:点击打开链接 微信公众号 地 址:点击打开链接 准备工作(工具包及镜像在后边) 一个8G以上的U盘(有的U盘标的是8G,实际只有7.X,实际容量小于7 ...

  3. crontab定时执行datax

    记录下使用crontab,datax定时同步数据遇到的问题. 1.开始使用如下配置,死活不执行.网上说crontab环境便利的问题,设置了也没反应. [root@hxjk_test_mysql_red ...

  4. JS-监听整个页面上的DOM树变化

    # [在线预览](https://jsfiddle.net/1010543618/fyf913t0/) ## 方法 - 使用<Web API 接口>的<MutationObserve ...

  5. nginx logformat说明

    记录一下nginx logformat的相关说明 log_format格式变量:$remote_addr  #记录访问网站的客户端地址$remote_user  #远程客户端用户名$time_loca ...

  6. win10 打开 sql sever配置管理器

    !找到解决办法啦!WIN10系统 此电脑->右击->管理弹出以上界面啊哈哈哈还有一些解决办法在这个贴吧里...http://tieba.baidu.com/p/3000709047

  7. 2019牛客多校第五场B-generator 1(矩阵快速幂)

    generator 1 题目传送门 解题思路 矩阵快速幂.只是平时的矩阵快速幂是二进制的,这题要用十进制的快速幂. 代码如下 #include <bits/stdc++.h> #defin ...

  8. Python matplotlib 交互模式

    在交互模式下一定要执行plt.pause(0.0001)  才会显示图像

  9. CentOS 7 配置SFTP

    目前越来越多的FTP客户端软件开始支持SSH协议上传和下载文件,这种协议方式就是SFTP. SFTP的优势主要有两点,一是不需要再配置个FTP服务端:二是SSH协议是安全传输,上传和下载是经过加密的. ...

  10. oracle中hint 详解

    Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...