Manacher算法-又叫马拉车算法 概要: Manacher算法主要用于求最长回文串,在求最长回文串的时候做了处理使长度均变成了奇数 1 S # 1 # 2 # 2 # 1 # 2 # 3 # 2 # 1 # 2 P 1 2 1 2 5 2 1 4 1 2 1 6 1 2 1 2 1 3 (p.s ...
分类:
编程语言 时间:
2020-04-01 19:05:55
阅读次数:
87
题目: 给你一个字符串,让你找一个最大回文串,这个回文串由该字符串的前缀和后缀一起组成 思路: 先处理字符串的两端直到两端不匹配为止,然后对中间的字符串跑一遍Manacher算法,然后 找出起始点为1或终止点为s.size()的最大回文串输出(这样才能保证满足前缀或后缀的条件),再分别输出即可 链接 ...
分类:
其他好文 时间:
2020-03-23 20:29:32
阅读次数:
73
"Link" 题意: $a$ 是 $s$ 的前缀,$b$ 是 $s$ 的后缀 使 $a+b$ 是可以找到的最大的回文串 $a$ 或 $b$ 可以是空串 思路: 找出最大长度 $k$ 使 $s[0,k 1]+s[len(s) k,len(s) 1]$ 是回文串 再用 Manacher 算法求出 $s[ ...
分类:
其他好文 时间:
2020-03-20 20:02:45
阅读次数:
88
#include <iostream> #include <algorithm> # define LL long long using namespace std; const int maxn=11000002; char data[maxn<<1]; int len[maxn<<1]; int ...
分类:
编程语言 时间:
2020-03-14 21:46:53
阅读次数:
67
题目链接:https://vjudge.net/problem/HDU-4513 题意:给定一个整型数组,求最大回文串,而且该回文串满足回文串中心的左边递增,右边递减。 思路: Manacher算法简单应用。 先用manacher算法求出p数组(p[i]表示以i为回文串中心的回文串最长是多少),然后 ...
分类:
其他好文 时间:
2020-03-04 21:01:05
阅读次数:
61
https://subetter.com/algorithm/manacher-algorithm.html #include<bits/stdc++.h> #define N 2050001 using namespace std; int len,p[N],Case,ans; char ch[N ...
分类:
编程语言 时间:
2020-02-26 23:20:52
阅读次数:
132
题目:输出最长回文子串,原串最长1000 坑:特判s=""; 复习一下马拉车算法,之前写的只求答案,没有要输出子串。 class Solution { public String longestPalindrome(String s) { //特判s="" if(s.length()==0) ret ...
分类:
编程语言 时间:
2020-02-19 15:12:44
阅读次数:
77
前言 写于$20200202$(滑稽 算法 现在有这样一个问题: 求一个字符串子串中回文串的数量 俺们会哈希!复杂度$O(nlogn)$ 但是显然我们今天要讲更优秀的算法~ 考虑一下,$kmp$算法是如何做到线性匹配的?它重复利用了之前的匹配信息! 那么我们在求回文串问题的时候可不可以也利用之前的匹 ...
分类:
编程语言 时间:
2020-02-02 15:54:07
阅读次数:
77
fl说今天是20200202,是个回文串,lzz应该整理一下回文串算法,于是整理一下马拉车。 很简单的回文字符串寻找算法,纯原创板子,返回信息最全,已过HDU上的板题,清除了上一次的残余信息而可多次调用。 1 #include<bits/stdc++.h> 2 #define pf printf 3 ...
分类:
编程语言 时间:
2020-02-02 12:15:18
阅读次数:
67
HDU 3613 Best Reward Manacher算法 题意 字符串,需要把这个字符串分成两段,并使得被分开的两段价值和最大。 一个串如果是回文,那么它的价值就是所有字符的价值和,否则价值为0。每个字母都有相应的价值,这个会给出。 解题思路 使用 ,我们可以算出每个点的回文串长度,然后我们枚 ...
分类:
编程语言 时间:
2020-02-01 16:34:05
阅读次数:
64