Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
这道题可以套用Palindrome Partitioning的解题思路不过会超时,暴力也会超时。
有一种Manacher's Algorithm的算法可以将空间复杂度和时间复杂度都降到O(n),下次写注意下。
参考别人用的是时间复杂度O(n^2),空间复杂度O(1)的方法。
"aba" "abba"这两种奇偶中心不一致的情况分开讨论。从中心向两边找。
Source
public String longestPalindrome(String s) {
if(s.length() == 0) return s;
String str = s.substring(0, 1);
for(int i = 0; i < s.length(); i++){
String temp = center(s, i, i); //奇数为中心
if(temp.length() > str.length())
str = temp;
temp = center(s, i, i + 1); //偶数为中心
if(temp.length() > str.length())
str = temp;
}
return str;
}
public String center(String s, int begin, int end){ //从中心往外找
while(begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)){
begin --;
end ++;
}
return s.substring(begin + 1, end);
}
Test
public static void main(String[] args){
String s = "abba";
String a = new Solution().longestPalindrome(s);
System.out.println(a);
}