leetcode5:最长回文子串
来源:互联网 发布:mac下制作黑苹果u盘 编辑:程序博客网 时间:2024/06/05 20:15
这个题目主要是运用manacher算法,又称为马拉车算法,下面对算法进行介绍。
manacher算法
首先,定义一些变量,假设当前访问的是第
然后假设现在要求以第
此时
此时
此时,
假设
然后对上述三种情况进行汇总:
观察总结之后发现,
2.字符串预处理
在求最长回文子串的时候,我们还得对区分以单字符为中心的最长回文子串和以双字符为中心的最长回文子串进行判断,为了便于处理,我们可以通过在字符串中加入统一的字符,将奇偶情况统一为以单字符为中心的最长子串。例如:对于字符串“abbc”,我们可以通过加入’#’字符,将其变为”#a#b#b#c#”,这样就变为以单字符为中心;对于字符”aba”,也通过加入’#’,将其变为”#a#b#a#”,仍然是以单字符为中心。就完成了统一,也便于使用manacher算法,因为该算法就是以单字符为中心。
但是由于最左边和最右边都是’#’,这样在进行左右判断的时候,就会
3.代码实现
public static String solve(String ss) { /* * 加#号,使得两种情况统一处理 * 如"aa"变为"#a#a#" * 再如"aba"变为"#a#b#a#" * 防止越界,在首部再加上@,尾部加上$,只要不同即可,防止越界 */ char[] cs = ss.toCharArray(); int len = cs.length * 2 + 3; //首部,尾部加一个不同的字符,防止越界 char[] res = new char[len]; res[0] = '@'; res[len - 1] = '$'; for(int i = 1; i < len - 1; i++) { if((i&1) != 0) { //如果是奇数 res[i] = '#'; } else { //偶数 res[i] = cs[i / 2 - 1]; } } int maxRight = 0; //能到的最右边 int longestCenter = 0; //最长的中心 int longest = 0; //最长 int nowCenter = 0; //到达最右边对应的中心 int[] dp = new int[len]; //以i位置就中心的最长回文串 for(int i = 1; i < len - 1; i++) { if(maxRight > i) { dp[i] = Math.min(dp[2*nowCenter - i], maxRight - i); } else { dp[i] = 1; } //考虑以此为中心,继续递增,因为恰好在边界上需要考虑 while(res[i + dp[i]] == res[i - dp[i]]) { dp[i]++; } if(dp[i] + i > maxRight) { maxRight = dp[i] + i; nowCenter = i; } if(longest < dp[i]) { longest = dp[i]; longestCenter = i; } } StringBuffer sb = new StringBuffer(); for(int i = longestCenter - longest + 1; i < longestCenter + longest - 1; i++) { if(res[i] != '#') sb.append(res[i]); } return sb.toString(); }
- leetcode5:最长回文子串
- leetcode5 最长回文子串
- leetcode5-Longest Palindromic Substring(最长回文子串)
- LeetCode5. Longest Palindromic Substring(最长回文子串:Manacher算法)
- HDU3068/Leetcode5 最长回文 (Manacher算法)
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- Python发送电子邮件.
- 实际中前后端开发数据交互是怎么样的
- Elon Musk公布特斯拉“下半场”目标:打造一个新能源公司 | 新智驾Weekly
- 乐视超级汽车智驾副总裁倪凯:为何被誉为“中国无人驾驶第一人”
- 浅谈C++中的重载、覆盖、隐藏
- leetcode5:最长回文子串
- 通过HTTP请求响应过程了解HTTP协议
- 支持向量机SVM(一)
- Understanding the JVM(三)对象的内存布局
- python—super
- 从软银本田联手打造智能汽车说开,看看AI如何造福汽车行业
- 360智能家庭总裁邓邱伟:由点及面构筑家庭生态
- MySQL与Python的交互
- monkey测试