博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
百度笔试题--最长回文字串
阅读量:5012 次
发布时间:2019-06-12

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

1 #include 
2 using namespace std; 3 4 void substring(char* str) 5 { 6 int len = strlen(str); 7 len = 2*len + 1; 8 for(int i = len; i >= 1; i--) 9 {10 if(i%2 == 0)11 str[i-1] = str[i/2-1];12 else13 str[i-1] = '#';14 }15 str[len] = '\0';16 int* p = new int[len]; //p[i]用来保存第i个字符为中心的回文字串向右/向左扩张的距离17 int mx = 0; //表示已经处理的回文字串向右扩张的最长距离18 int id = 0; //表示上述回文子串的中间位置19 memset(p,0,len);20 for(int i = 0; i < len; i++)21 {22 if(mx - i > 0)23 {24 p[i] = p[2*id - i] < (mx - i)?p[2*id - i]:(mx-i);25 }26 else27 p[i] = 1;28 while(str[i + p[i]] == str[i - p[i]]) p[i]++;29 if(p[i] > mx - i)30 {31 mx = i + p[i];32 id = i;33 }34 }35 mx = 0;36 id = 0;37 for(int i = 0; i < len; i++)38 {39 if(p[i] > mx)40 {41 mx = p[i];42 id = i;43 }44 }45 cout<<"最长回文字串:";46 for(int i = id-mx+1; i < id+mx; i++)47 {48 if(str[i] != '#')49 cout<
>str;62 substring(str);63 delete[] str;64 str = NULL;65 }66 return 0;67 }

 

转载于:https://www.cnblogs.com/GODYCA/p/3352191.html

你可能感兴趣的文章
Kafka初入门简单配置与使用
查看>>
第三章Git使用入门
查看>>
Amd,Cmd, Commonjs, ES6 import/export的异同点
查看>>
cocos2dx-Lua与Java通讯机制
查看>>
上下文管理器之__enter__和__exit__
查看>>
android3.2以上切屏禁止onCreate()
查看>>
winform文件迁移工具
查看>>
delphi DCC32命令行方式编译delphi工程源码
查看>>
paip.输入法编程----删除双字词简拼
查看>>
or1200下raw-os学习(任务篇)
查看>>
ZOJ - 3939 The Lucky Week(日期循环节+思维)
查看>>
小花梨的取石子游戏(思维)
查看>>
Ubuntu 18.04安装arm-linux-gcc交叉编译器
查看>>
.net core i上 K8S(一)集群搭建
查看>>
django drf 深入ModelSerializer
查看>>
Android---Menu菜单
查看>>
【资源导航】我所用到过的工具及下载地址
查看>>
监控Tomcat
查看>>
剑指offer编程题Java实现——面试题4后的相关题目
查看>>
简单的社交网络分析(基于R)
查看>>