<每日一题>最大回文子字符串
来源:互联网 发布:矩阵的乘法计算方法 编辑:程序博客网 时间:2024/05/30 22:46
使用Manacher法求解
def findBMstr(s): #创建新的s new_s='' for sub in s: new_s+='#'+sub new_s='#' #初始化p,记录以每个在new_s中的字符为中心的最大回文子串的单边延伸量 l=len(new_s) p=[1 for _ in range()] #遍历每个字符,计算p[i] q=0 for i in range(l): #计算以new_s[q]为中心的最大回文子串的左边界下标 edge=q+p[q]-1 #计算下标i关于下标q的对称下标mir_i mir_i=2*q-i #如果下标i大于new_s[q]的边界下标,则以new_s[i]为中心向两边查找 if i>edge: #算出i离两边边界较近的距离 near_l=min(l-1-i,i) #以i为中心向两边扩展 for j in range(1,near_l+1): if new_s[i+j]==new_s[i-j]: p[i]+=1 else: break #跟新q值 q=i #当i在边界范围内,则分两种情况 else: #第一种i关于q的对称点mir_i的延伸长度超出 左边的 edge,对 #应回来i,超出部分用暴力查找 if i+p[mir_i]>edge: p[i]=edge-i+1 #计算edge,edge关于i对称点离new_s两边较近距离 near_l=min(l-1-edge,2*i-edge) for j in range(1,near_l+1): if new_s[edge+j]==new_s[2*i-edge-j] p[i]+=1 else: break #第二种情况 else: p[i]=p[mir_i] return max(p)-1
特别注意解题过程中下标的控制
阅读全文
0 0
- <每日一题>最大回文子字符串
- 最大回文子字符串
- 求最大回文子字符串
- 每日一题(49) - 最长回文子串
- 每日一题(20) - 最大子序列和
- 每日一题(51) - 最大子序列积以及区间
- 每日一题(77) - 子数组的最大乘积
- 字符串的最大回文子串判断
- 求字符串的最大回文子串
- 每日一练-----求最长回文子串
- 最长回文子串----leetcode每日一练
- 每日一题(81) - 子数组之和的最大值(二维) - 最大子矩阵和
- 笔试——字符串算法题——寻找最大回文子串
- JAV打印字符串中最大的回文子串
- Longest Palindromic Substring (最大回文子字符串)
- 字符串最大回文子串的查找java实现
- LeetCode 5 Longest Palindromic Substring(最大回文子字符串)
- 求一个字符串中的最大回文子串
- 走穿java23钟设计模式-11外观模式
- 一个有趣python self的题目
- 第十三周 【项目1
- Linux常用指令
- 模糊图像退化与去模糊的数学模型
- <每日一题>最大回文子字符串
- springMVC容器和Spring容器
- unity3d保存文件到本地and加载本地文件
- Struts2的Ajax输入校验
- 【NOI 2015 软件包管理器】【树剖】
- 算法爱好者——删除数字 ? 待解决
- 有个疑问opencv保存的视频在哪里呢 如何去电脑文件里找到
- 中共中央办公厅 国务院办公厅印发《推进互联网协议第六版(IPv6)规模部署行动计划》
- AJAX处理数据提交到Servlet