已通过leetcode647:https://leetcode-cn.com/problems/palindromic-substrings/

void get_d(vector<int> & d, const string & s)
{
//l r 为维护的最靠右的回文串边界
int n = s.size(), l = 0, r = -1;
for(int i = 0; i < n; ++i)
{
//在边界内,刚处理完i-1,最差情况是l == r == i-1
//所以一定i>l,k是初始确定的以i为中心的回文串半径(数量)
int k = i > r ? 1 : min(d[l + r - i], r - i + 1);
while(i + k < n && i - k >= 0 && s[i-k] == s[i+k])
++k;
d[i] = k--; //循环的条件被k破坏,出来后要k--
if(i + k > r)
{
r = i+k;
l = i-k;
}
}
} int manacher(const string &s)
{ int n = s.size();
//d1[i]为以i为中心的回文串(长度为奇数)数量,
vector<int> d1(n);
get_d(d1, s); //辅助字符串,统一处理偶数长度的回文串
string s2(n*2+1, ' ');
for(int i = 0, j = 1; i < n; ++i, j+=2)
s2[j] = s[i]; vector<int> d2(n), d3(2*n+1);
get_d(d3, s2);
for(int i = 2, j = 0; j < n; ++j, i+=2)
d2[j] = (d3[i] - 1)/2; int sum = 0;
for(int i = 0; i < n; ++i)
sum += d1[i] + d2[i];
return sum;
}

(模板)Manacher算法:线性时间求字符串内回文子串的数量的更多相关文章

  1. Manacher算法 O(n) 求最长回文子串

    转自:http://bbs.dlut.edu.cn/bbstcon.php?board=Competition&gid=23474 其实原文说得是比较清楚的,只是英文的,我这里写一份中文的吧. ...

  2. PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  3. Manacher模板( 线性求最长回文子串 )

    模板 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> us ...

  4. Manacher算法——求最长回文子串

    首先,得先了解什么是回文串.回文串就是正反读起来就是一样的,如“abcdcba”.我们要是直接采用暴力方法来查找最长回文子串,时间复杂度为O(n^3),好一点的方法是枚举每一个字符,比较较它左右距离相 ...

  5. Manacher 求最长回文子串算法

    Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...

  6. Manacher算法(马拉车)求最长回文子串

    Manacher算法求最长回文字串 算法思路 按照惯例((・◇・)?),这里只是对算法的一些大体思路做一个描述,因为找到了相当好理解的博客可以参考(算法细节见参考文章). 一般而言,我们的判断回文算法 ...

  7. #1589 : 回文子串的数量(Manacher)

    #1589 : 回文子串的数量 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个字符串S,请统计S的所有|S| * (|S| + 1) / 2个子串中(首尾位置不 ...

  8. Hihocoder #1602 : 本质不同的回文子串的数量 manacher + BKDRhash

    #1602 : 本质不同的回文子串的数量 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个字符串S,请统计S的所有子串中,有多少个本质不同的回文字符串? 注意如果 ...

  9. hdu 3068 最长回文(manachar求最长回文子串)

    题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...

  10. 【HIHOCODER 1589】回文子串的数量(Manacher)

    描述 给定一个字符串S,请统计S的所有|S| * (|S| + 1) / 2个子串中(首尾位置不同就算作不同的子串),有多少个是回文字符串? 输入 一个只包含小写字母的字符串S. 对于30%的数据,S ...

随机推荐

  1. hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached

    windows 的hyper-v 安装了 centos 或者龙蜥 操作系统,会一直提示这个信息: hv_balloon: Balloon request will be partially fulfi ...

  2. [FATAL] [DBT-06103] 端口 (1,521) 已在使用

    今天参考之前文章 Oracle 19c快速安装部署 在一个新的环境进行安装时,发现配置数据库时报错1521端口被占用: [root@OEL7 media]# /etc/init.d/oracledb_ ...

  3. 如何使用MBP制作Win启动盘

    最近有一个需求,想给家人的一台笔记本安装一套win 10的操作系统,但是我手头上现在没有对应的启动U盘. 由于工作原因,很多年没用win了,工作电脑也都是MBP,根本没有之前使用win时熟悉的Ultr ...

  4. 安装Electron时卡在install.js不动的解决方案

    问题来源,发现即使 源切换成淘宝的之后,安装 electron的时候还是慢死,郁闷,后来百度才发现,原来,还需要设置一个地方!!! 经过试验,果然快了 爽.... 之前在安装Electron的时候,经 ...

  5. .NET 云原生架构师训练营(模块二 基础巩固 MVC终结点)--学习笔记

    2.3.4 Web API -- MVC终结点 MVC与MVVM 模型绑定 自定义模型绑定器 模型验证 返回数据处理 MVC与MVVM MVC ASP.NET Core MVC 概述:https:// ...

  6. Centos7和Centos8的NFS配置

    Centos7和Centos8的NFS配置几乎是完全一样的 服务端 Centos7默认安装了rpcbind, nfs-utils, 其中rpcbind的服务默认是启用的, nfs-utils默认是禁用 ...

  7. 【Android】使用 MediaMetadataRetriever 获取视频信息

    1 环境配置与初始化 ​ (1)申请权限 ​ 在 AndroidManifest.xml 中的 manifest 标签(application 同级标签)下添加外部存储读写权限,如下: <use ...

  8. Laravel入坑指南(12)——最终章:Session、缓存与Redis

    因为web服务除了业务准确之外,我们最关注的就是服务的性能.鉴于web服务几乎都是IO密集型,我们为了提高IO的速度,自然不能把所有的数据都放在关系型数据库中.而redis的并发与性能可以很好地帮我们 ...

  9. websocket 监听端口问题

    有用户反馈使用我们的软件时会出现 ERR_CONNECTION_CLOSED 问题 我们根据反馈排查问题发现是软件的 websocket 监听端口被另一款软件占用了,暂时的解决方法是将占用的软件关闭 ...

  10. swagger 文档优化 knife4j 增强 Swagger

    swagger 省去了程序员开发过程中拟写接口文档的时间,是团队开发必不可少的工具,原生的swagger 界面功能比较少,也不支持文档导出,业界也有不少针对swagger 文档界面优化的插件,良莠不齐 ...