leetcode-5. Longest Palindromic Substring
来源:互联网 发布:淘宝图片轮播什么意识 编辑:程序博客网 时间:2024/06/02 02:53
leetcode-5. Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
这题总的来看的话有3类比较好的写法吧。不过这里我只实现了两种。
DP算法
第一类是DP。这类没有实现。就是构造一个int[s.length][s.length]的数组。当然时间复杂度和空间复杂度都是O(n^2);
O(N^2)中心算法
第二类是先找到回文的中心,然后分奇偶两种情况去找,这样时间复杂度是O(n^2),空间复杂度应该是O(n);、
leetcode讨论里的答案一般都是这种。这种解题思路比较清晰。
public class Solution { private String longest = ""; public String longestPalindrome(String s) { for(int i = 0 ; i < s.length() ; i++){ helper1(s,i); helper2(s,i); } return longest; } private void helper1(String s, int t){ for(int i = t, j = t;i>=0 && j <s.length();i--,j++){ if(s.charAt(i)==s.charAt(j)) longest = j-i+1 > longest.length() ? s.substring(i,j+1):longest; else break; } } private void helper2(String s, int t){ for(int i = t, j = t+1;i>=0 && j <s.length();i--,j++){ if(s.charAt(i)==s.charAt(j)) longest = j-i+1 > longest.length() ? s.substring(i,j+1):longest; else break; } }}
Manacher算法
时间复杂度是O(n),是非常漂亮算法。就是理解稍微复杂一些。
网上有比较多的解释。
但是实际上,我用这个实现的时候submit上的代码跑起来比第二种算法还要慢,以至于TLE。。后来看一下讨论里的Manacher算法。发现他是把String的操作改成char[]。这样应该会快一些。不过我这里就不做了。
public class Solution { public String longestPalindrome(String s) { String st = "#"; for(int i = 0 ; i < s.length() ; i++) st += s.charAt(i)+"#"; st = "$"+st+"$"; // System.out.println(st); int right = 0, cenpos = 0,ans = 0, ansi = 0; int [] len = new int[st.length()]; for(int i = 1 ; i < len.length ; i++){ if(right > i){ len[i] = Math.min(right-i,len[2*cenpos-i]); }else{ len[i] = 1; } while((i-len[i])>=0 && (i+len[i])<st.length() && st.charAt(i-len[i])==st.charAt(i+len[i])) len[i]++; len[i]--; if(len[i]+i>right){ right = len[i]+i; cenpos = i; } if(len[i]>ans){ ans = len[i]; ansi = i; } } String ret = st.substring(ansi-ans,ansi+ans+1); String r = ""; for(int i = 0 ; i <ret.length();i++) if(ret.charAt(i)!='#' &&ret.charAt(i)!='$') r+=ret.charAt(i); // System.out.println(r); return r; }}
manacher的解释
AC的manacher算法的java实现
5. Longest Palindromic Substring算法小结
0 0
- LeetCode 5. Longest Palindromic Substring
- LeetCode --- 5. Longest Palindromic Substring
- LeetCode 5.Longest Palindromic Substring
- [Leetcode] 5. Longest Palindromic Substring
- [LeetCode]5.Longest Palindromic Substring
- [leetcode] 5. Longest Palindromic Substring
- LeetCode-5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring
- LeetCode 5. Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- LeetCode-5. Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- LeetCode *** 5. Longest Palindromic Substring
- 【leetcode】5. Longest Palindromic Substring
- Material Design概述(一)
- 内部类
- 64位 windows10下 Apache2.4 + php7 + phpstorm 相关设置
- Trait
- 关于jsp页面table 实现checkbox复选
- leetcode-5. Longest Palindromic Substring
- Java源码视频
- JAVA注释应用小例子
- android 开发笔记 图片轮播
- PCL可视化例程
- InnoDB最佳实现
- 树莓派学习笔记——webiopi装配与入门
- Codeforces Round #379 (Div. 2) Anton and Chess
- Jenkins简介