tencent2016实习生笔试A Problem's Link Mean: 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。 analyse: 对于这题来说,插入字符和删除字符使其成为回文串,答案是一样的. 首先求s的反串r ...
分类:
其他好文 时间:
2016-04-10 23:59:39
阅读次数:
467
之前做过类似的题,只是理解了,还没达到驾轻就熟,想到即敲出的地步,所以再练一次。
顺带将Manacher算法思想解释一遍,加强印象,也算作分享吧。
Manacher我们用f(x)表示以x位置为中心的回文串的长度
j相对i的对应位置是j’
那么f(j)与f(j’)和f(i)有什么关系呢。
先看第一张图,下面那条横杠表示f(i),那么,既然j’与j相对应,j’的回文串长度已经求出,那么j...
分类:
其他好文 时间:
2016-04-10 06:53:48
阅读次数:
137
len[u]表示结点u所表示的回文串长度,cnt[u]表示结点u所表示的回文串出现次数,num[u]表示结点u的后缀回文串个数(包括自己)。 由于一个字符串本质不同的回文串最多不超过n个,所以空间开n+2即可,算上每个结点的26个Next指针,空间复杂度o(26*n)。时间复杂度o(n)。 stru ...
分类:
其他好文 时间:
2016-04-07 01:29:19
阅读次数:
137
回文树的裸题。 #include<bits/stdc++.h> #define REP(i,a,b) for(int i=a;i<=b;i++) #define MS0(a) memset(a,0,sizeof(a)) using namespace std; typedef long long l ...
第一道题:求有删除情况的最长回文子串 题目: 解题思路: 这个题严格意义上来说,删除了字符就谈不上回文串了,既然有删除,那估计考察的不是回文串,而是其他的,但是这个东西又有回文串的特点,细想一下——那就是不连续的回文串,想到不连续,就容易使人想到最长公共子序列,把源字符串逆序之后对比两个字符串发现: ...
分类:
编程语言 时间:
2016-04-06 13:24:41
阅读次数:
182
最长回文子串问题—Manacher算法
最长回文串问题是一个经典的算法题。
0. 问题定义
最长回文子串问题:给定一个字符串,求它的最长回文子串长度。
如果一个字符串正着读和反着读是一样的,那它就是回文串。下面是一些回文串的实例:
12321 a aba abba aaaa tattarrattat(牛津英语词典中最长的回文单词)...
分类:
其他好文 时间:
2016-04-04 15:01:02
阅读次数:
176
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3676 【题意】 给定一个字符串,定义一个串的权值为长度*出现次数,求最大权的回文子串。 【思路】 马拉车求出本质不同的回文子串。 对于一个回文子串,在SAM中用倍增法在O(logn)的时 ...
xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串。 (题于文末) 知识点: n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列。 若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其... ...
分类:
其他好文 时间:
2016-04-03 11:38:10
阅读次数:
281
【题意】 你可以产生一个回文串,也可以将两个串合并成一个串,问产生目标串需要的最少合并次数。 【思路】 Manacher求出每个位置可以向两边延伸的最长回文串。 则题目转化为有若干条线段,求最少的线段将[1..n]覆盖。贪心DP皆可上,DP需要BIT优化一下。 【代码】 ...
分类:
其他好文 时间:
2016-04-03 10:14:36
阅读次数:
132