字符串
carson0408
热衷于编程,喜欢研究算法,挑战难题,享受AC的过程,希望自己能够不断进步,不断成长。
展开
-
最小窗口问题--Java语言
情境:给定一个字符串chars和一个输入字符串input,在input中寻找包含chars所有字符的最小窗口。例如,求input="ABBACBAA",chars="AAB"的最小窗口。思路:如果这个算法使用暴力解法,使用内外循环遍历的话,时间复杂度过高,程序冗余。所以基于滑动窗口的方法,就可以想到散列表的思路,可以将目标字符串先映射到一个数组中,然后通过对输入字符串进行遍历,利用数组的查找时原创 2017-11-30 22:41:09 · 1102 阅读 · 0 评论 -
51nod1089最长回文子串--Manacher算法(Java语言)
在之前的文章中,我分析了最长回文子序列的问题,是比较通用的方法,即将最长回文子序列问题转化为我们最常见的LCS问题:通过求字符串本身及其逆序字符串的LCS问题即可求得最长回文子序列问题,时间复杂度为O(n^2),这对于可不连续的子序列是一个通用解法。那么,对于回文子串即结果是连续的回文子序列是否有更好的解法呢?答案当然是有啊,就是我们今天要讲的主角,马拉车算法(Manacher),这与普通的解法最原创 2017-12-10 16:34:58 · 1358 阅读 · 0 评论 -
LCS问题与LIS问题--Java语言
一般在各大oj上做算法题时,LCS问题和LIS问题是常遇到的问题。首先是LCS问题:一般来说,如果求最大公共子串比较好处理,只需要内外循环对两个字符串遍历即可,求出哪个连续公共段最长即可。但是若不考虑连续,求最大公共子序列时,问题难度得到了一定的增加,如果只是简单的遍历便无法得到正确的解。因此可以通过打表法的形式,即通过动态规划思想,然后利用二维数组记录公共子序列的状态,然后利用状态转移方程来求解...原创 2017-12-03 20:28:58 · 1597 阅读 · 1 评论 -
Manacher算法解决最长回文串问题
如果求一个字符串,求字符串中最长连续回文子串问题,如果用暴力求解的话会使得时间复杂度为O(n^2),因为暴力方法在以不同字符为中心往两边扩的时候,每次都是往两边扩,那么其中有好多重复扩的部分。而本文讲解的manacher算法就是使得前面将前面扩的部分备份,后面扩的时候便于省去不需要重复扩的部分,从而降低时间复杂度,使得时间复杂度大约为O(n)。首先先说明manacher算法的三个重...原创 2018-03-28 11:09:42 · 213 阅读 · 0 评论