题目描写叙述:

推断能否将字符串S分成三段非空回文串。

解题思路:

源码:

#include <cstdio>
#include <algorithm>
#define MAXN 20010
using namespace std; int n;
char d[MAXN];///原始字符串
char st[MAXN*2];///经过manacher处理之后的字符串
int p[MAXN*2];///保存回文串半径,ps每一个回文串长度一定为奇数 int ll[MAXN*2];///第一个回文串可能的全部半径
int rr[MAXN*2];///第三个回文串可能的全部半径 void manacher(){///manacher算法,能够去查询了解一下
int i;
st[0]='$';
st[1]='#';
for(i=1;d[i]!='\0';++i){
st[i*2]=d[i];
st[i*2+1]='#';
}
st[i*2]='\0';
n=i*2-1;
int MaxId=0,id;
for(int i=1;i<=n;i++)
{
if(MaxId>i)
p[i]=min(p[2*id-i],MaxId-i);
else
p[i]=1;
while(st[i+p[i]]==st[i-p[i]])
p[i]++;
if(p[i]+i>MaxId){
id=i;
MaxId=p[i]+i;
}
}
} int main(){
int res;
scanf("%d",&res);
while(res--){
scanf("%s",&d[1]);
manacher();
int l=0,r=0;
for(int i=1;i<=n;i++){
if(p[i]==i&&i!=1)///p[i]==i保证p[i]能够作为第一个回文串的半径,增加ll数组,i!=1保证第一个回文串不为空
ll[l++]=p[i];
if(p[i]+i-1==n&&i!=n)///与上面相似
rr[r++]=p[i];
}
int i,j;
for(i=l-1;i>=0;--i){
for(j=0;j<=r-1;++j){///枚举第一个回文串和第三个回文串
int tl=2*ll[i];///第二个字符串的開始位置
int tr=n+1-2*rr[j];///第二个字符串的结束位置
int tmp=(tl+tr)/2;///第二个字符串的中间位置,ps:这三个字符串都为奇数,能够自己想想
if(tl>tr) continue;
if(p[tmp]==1) continue;///第二个字符串为"#",也即是在原串中为空
if(p[tmp]*2-1>=tr-tl+1)///以tmp为中点的回文串的长度大于等于第二个字符串的长度,符合题意跳出循环
break;
}
if(j<=r-1)
break;
}
if(i>=0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}

最新文章

  1. Xcode 改时间问题 lua代码没反应问题
  2. 1Z0-053 争议题目解析701
  3. AFNetworking 3.0.4 的使用
  4. ABAP 表格控制(Table Control)和步循环
  5. Windows Phone 8开发环境搭建
  6. 码云分布式之 Brzo 服务器
  7. arcgis engine - 鹰眼在栅格图无法显示.
  8. Linux&amp;shell之高级Shell脚本编程-创建菜单
  9. POJ22230 Watchcow (欧拉回路)
  10. C#控件TabControl隐藏page
  11. RHEL7 单独安装图形 X11
  12. thinkphp3.2后台模块怎么添加(admin),直接复制Home?还是在入口文件生成?
  13. jxl 导出数据到excel
  14. 学习小片段——springboot 错误处理
  15. Centos使用虚拟环境创建python django工程
  16. emwin之小键盘制作
  17. Servlet中(Session、cookies、servletcontext)的基本用法
  18. 14_python 匿名函数,递归函数
  19. C语言递归练习
  20. [Linux] 如何在 Linux 中提取随机数

热门文章

  1. [python xml 学习篇][0]
  2. CodeM美团点评编程大赛初赛A轮
  3. 九度oj 题目1363:欢乐斗地主
  4. 九度oj 题目1356:孩子们的游戏(圆圈中最后剩下的数)
  5. 337. House Robber III(包含I和II)
  6. matlab 中的删除文件
  7. CountDownLatch和CyclicBarrier 的用法
  8. UGUI 点击穿透问题
  9. hdu 1007 Quoit Design 分治求最近点对
  10. 【NOIP2016练习】T1 挖金矿(二分答案)