hdu4513--Manacher算法--回文串的O(n)算法
腾讯的比赛的题目的质量都很高 特别喜欢这题目背景 每题都很有意思
这题 也蛮难的 因为n太多了 一定要用O(n)的回文串算法来求
我是在这里学习的 传送
一般的话 都是char数组 使用特殊字符 表示插入 开头和末尾也是特别的字符 末尾的话是 '\0'
这边的话 因为是Int数组 要注意下 0 和 末尾不能取相同值 这样会错的 插入的值 一定要在这个Height范围外
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 const int size = 100010; 6 int height[size*2]; 7 int pos[size*2]; 8 9 int main() 10 { 11 cin.sync_with_stdio(false); 12 int t , n , id , maxLen , ans; 13 cin >> t; 14 while( t-- ) 15 { 16 cin >> n; 17 height[0] = -3; 18 for( int i = 1 ; i<=n ; i++ ) 19 { 20 height[i*2-1] = -1; 21 cin >> height[i*2]; 22 } 23 height[n*2+1] = -1; 24 height[n*2+2] = -2; 25 n = n * 2 + 2; 26 ans = maxLen = 0; 27 for( int i = 1 ; i<n ; i++ ) 28 { 29 if( maxLen > i ) 30 { 31 pos[i] = min( pos[id*2-i] , maxLen-i ); 32 } 33 else 34 { 35 pos[i] = 1; 36 } 37 while( height[ i+pos[i] ] == height[ i-pos[i] ] ) 38 { 39 if( height[ i+pos[i] ] == height[ i-pos[i] ] == -1 ) 40 { 41 ++ pos[i]; 42 } 43 else if( height[ i+pos[i] ] <= height[ i+pos[i]-2 ] ) 44 { 45 ++ pos[i]; 46 } 47 else 48 break; 49 } 50 if( i + pos[i] > maxLen ) 51 { 52 maxLen = i + pos[i]; 53 id = i; 54 } 55 } 56 for( int i = 0 ; i<n ; i++ ) 57 { 58 ans = max( ans , pos[i]-1 ); 59 } 60 cout << ans << endl; 61 } 62 return 0; 63 }
View Code
转载于:https://www.cnblogs.com/radical/p/4029683.html
hdu4513--Manacher算法--回文串的O(n)算法相关推荐
- 【回文串1 动态规划 马拉车算法】LeetCode 5. Longest Palindromic Substring
LeetCode 5. Longest Palindromic Substring LeetCode中与回文串相关的免费的题目共有15道(5, 9, 125, 131, 132, 214, 234, ...
- 47 -算法 -回文串 -Leetcode 125 - 验证回文串
// 模块化 自己在单独写一个函数都忘了 string 也有size a ASCII码为97 小a //为65 [NUM1 - 'A']%32 == [NUM2 - 'A']%32 忽略大小写#inc ...
- 通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)
1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...
- java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...
1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...
- 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)
马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...
- 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode 5 迅速判断回文串的Manacher算法...
本文始发于个人公众号: TechFlow 题意 Given a string s, find the longest palindromic substring in s. You may assum ...
- 2015 UESTC Training for Search Algorithm String - M - Palindromic String【Manacher回文串】
O(n)的复杂度求回文串:Manacher算法 定义一个回文值,字符串S是K重回文串,当且仅当S是回文串,且其长度为⌊N/2⌋的前缀和长度为⌊N/2⌋的后缀是K−1重回文串 现在给一个2*10^6长度 ...
- 【算法】双指针算法 ( 有效回文串 II )
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...
- 【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )
文章目录 一.双指针算法分类 二.相向双指针示例 ( 有效回文串 ) 一.双指针算法分类 面试时经常遇到 限制算法复杂度为 O(n)O ( n )O(n) 的情况 , 就需要使用以下算法 : 双指针算 ...
最新文章
- linux中使用scp远程拷贝文件及文件夹
- SAP ABAP ALV list background render
- make: 警告:检测到时钟错误。您的创建可能是不完整的。
- jQuery对Ajax的封装应用(三)
- [计数排序]统计三个数和的[最大概率](洛谷P2911题题解,Java语言描述)
- 无人驾驶、自动驾驶与驾驶辅助的区别
- pythonsqlalchemy怎么看到返回的具体内容_sqlalchemy返回值总结
- python实现刷博器(适用于新浪、搜狐)
- TP5.0 Redis(单例模式)(原)
- 基于51单片机的智能温控风扇设计
- 系统缺少OBS Studio的运行时组件 解决方法
- wordpress 通过get_the_excerpt和the_excerpt函数获取文章摘要
- HJ 82 将真分数分解为埃及分数
- 推荐几个优质公众号,一个个都好优秀!(大实话)
- 博图软件中多重背景块的建立_过路老熊_新浪博客
- 一眼就能看懂的Android自学手册,深度好文
- 极路由 openwrt 使用 SyncY 实现百度云同步
- [转]linux shell 正则表达式(BREs,EREs,PREs)差异比较
- 二十四、红孩儿亲爹的考证
- 关键词热度查询导出工具-自动每天实时关键词更新导出工具
热门文章
- 解决spring整合mybatis时错误 ‘org.mybatis.spring.mapper.MapperScannerConfigurer#0‘
- python 换脸 github_人脸识别和换脸相关深度学习开源项目github汇总
- python规模_python语言计算生态规模有多大?
- mysqlcsv导入中文乱码_Mysql 导入导出csv 中文乱码问题的解决方法
- linux shell 等待输入_linux运维——基础篇
- Linux系统的操作命令
- java code combat_极客战记怎么换成java_「网易官方」极客战记(codecombat)攻略-沙漠-脆弱的士气......
- js怎么在一个div中嵌入另一网站_好程序员web前端学习路线分享HTML5常见面试题集锦一...
- 程序员算事业单位吗_清北毕业出来的程序员不如三本公务员?网友:你开心就好...
- HDLBits答案(3)_Verilog模块的例化与调用