博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【hihocoder 1032】最长回文子串
阅读量:5174 次
发布时间:2019-06-13

本文共 1518 字,大约阅读时间需要 5 分钟。

【题目链接】:

【题意】

【题解】

原文地址:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


UPD1

RL[j]的定义是,回文最左或最右端到中心点j的距离
【Number Of WA
0
【完整代码】

#include 
using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define LL long long#define rep1(i,a,b) for (int i = a;i <= b;i++)#define rep2(i,a,b) for (int i = a;i >= b;i--)#define mp make_pair#define pb push_back#define fi first#define se second#define ms(x,y) memset(x,y,sizeof x)typedef pair
pii;typedef pair
pll;const int dx[9] = {
0,1,-1,0,0,-1,-1,1,1};const int dy[9] = {
0,0,0,-1,1,-1,1,-1,1};const double pi = acos(-1.0);const int N = 2e6+100;int t,rad[N];char str[N],s[N];int main(){ //freopen("F:\\rush.txt","r",stdin); ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use cin >> t; while (t--) { cin >> str; int n = 1; s[0] = '$',s[1] = '#'; for (int i = 0;str[i];i++) { s[++n] = str[i]; s[++n] = '#'; } int maxright = 0,pos=0; rep1(i,1,n) { if (maxright>i) rad[i] = min(maxright-i,rad[pos*2-i]); else rad[i] = 1; while (s[i-rad[i]]==s[i+rad[i]]) rad[i]++; if (i+rad[i]-1>maxright) { maxright = i+rad[i]-1; pos = i; } } int ans = rad[1]-1; rep1(i,2,n) ans = max(ans,rad[i]-1); cout << ans << endl; } return 0;}

转载于:https://www.cnblogs.com/AWCXV/p/7626357.html

你可能感兴趣的文章
killing rabbits
查看>>
Linux centos6.5 系统语言改成中文简体
查看>>
linux sort命令用法
查看>>
Linux入门第三天——more,less,head,tail,ls 用户权限
查看>>
回炉重造
查看>>
struts2-json-jquery ajax 操作
查看>>
不用改任何代码在Eclipse中使用AAR
查看>>
从cocos2dx中寻找函数指针传递的方法
查看>>
Unity目录结构
查看>>
欧拉回路和欧拉路径
查看>>
Java 推荐读物与源代码阅读
查看>>
BlogEngine.Net架构与源代码分析系列part1:开篇介绍
查看>>
N皇后问题
查看>>
优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam
查看>>
2016腾讯全球合作伙伴大会马化腾《给合作伙伴的一封信》
查看>>
Javascript学习笔记-基本概念-数据类型
查看>>
ES6总结
查看>>
c#隐藏tabcontrol选项卡
查看>>
LeetCode "Combinations"
查看>>
LeetCode "Integer to English Words"
查看>>