AcWing 139. 回文子串的最大长度 hash打卡
如果一个字符串正着读和倒着读是一样的,则称它是回文的。
给定一个长度为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打卡的更多相关文章
- AcWing:139. 回文子串的最大长度(字符串Hash + 前缀和 + 后缀和 + 二分)
如果一个字符串正着读和倒着读是一样的,则称它是回文的. 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少. 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个 ...
- 139. 回文子串的最大长度(回文树/二分,前缀,后缀和,Hash)
题目链接 : https://www.acwing.com/problem/content/141/ #include <bits/stdc++.h> using namespace st ...
- 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297
1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...
- hiho一下 第一周 最长回文子串
时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这 ...
- 九度OJ 1252:回文子串 (字符串处理、DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:387 解决:224 题目描述: 输入一个字符串,输出该字符串中对称的子字符串的最大长度. 比如输入字符串"google" ...
- 九度oj 题目1252:回文子串
题目描述: 输入一个字符串,输出该字符串中对称的子字符串的最大长度. 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4. 输入: 存在多组数据,每组数据一行字 ...
- manacherO(n)求最长回文子串 hihocoder1032
原文地址:https://segmentfault.com/a/1190000003914228 http://blog.csdn.net/synapse7/article/details/189 ...
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 最大长度回文子串(Manacher's algorithm)
输出最大长度的回文子串. string longestPalindrome(string s) { int id, mx, i, j, len, maxlen; vector<char> ...
随机推荐
- Ceph中PG和PGP的区别
http://www.zphj1987.com/2016/10/19/Ceph%E4%B8%ADPG%E5%92%8CPGP%E7%9A%84%E5%8C%BA%E5%88%AB/ 一.前言 首先来一 ...
- I2C_24c02实验
一.RCC初始化 /* Setup the microcontroller system. Initialize the Embedded Flash Interface, initialize th ...
- eclipse run error:g++ not found in Path
网上有人说: 在eclipse下 windows-->Preference-->C/C++-->Build-->Setting然后选择Discovery标签,将里面的内容全部R ...
- #pragma hdrstop
#pragma hdrstop#pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译.BCB 可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘 ...
- 百度上有个最难数独, 用python跑它
直接上代码 #!/usr/bin/python3 #coding=GB2312 import tkinter as tk import threading import time import ran ...
- 一个普通函数的冷僻属性(length、caller、arguments、name、[[Scopes]]和[[FunctionLocation]])
https://blog.csdn.net/qq_17175013/article/details/81915059
- CF_127E reader Display
这道题其实找到规律之后其实不难,和破损的键盘一样,都有点递推转移的感觉 题意: 你可以进行这样一次操作:选一个点,然后把这个点横切竖切直到正对角线上面的点,全部翻转过来,问你要进行多少次操作才能把所有 ...
- 使用 C++ 编写的基础 Windows 服务 (CppWindowsService)
最近项目中涉及到使用C++写一个后台服务程序,找了很多资料,还是使用Google搜索找到了比较详细点的资料,就是从微软官方MSDN的例子,如下: 使用 C++ 编写的基础 Windows 服务 (Cp ...
- 微服务-熔断器 Hystrix 的原理与使用
前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选 ...
- 初探remoting双向通信(一)
原 初探remoting双向通信(一) 2013年06月24日 15:47:07 喜欢特别冷的冬天下着雪 阅读数 4389 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...