题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例2:
输入: "cbbd"
输出: "bb"
思路
1.可以使用中心扩展法来寻找此题的答案,而一个字符串的中心应该是2n-1个而不是n个,因为两个字母相同的话,该中心在其二者的“夹缝”中。
2.为了分割中心方便,我们可以将每个字母使用特殊符号分割,然后遍历整个字符串,最终寻找到最长子串。
Java代码实现
public static String longestPalindrome(String s) {
String str = "#";
for (int i = 0; i < s.length(); i++) {
str += s.charAt(i)+"#";
}
String longestStr = "";
for (int i = 1; i < str.length(); i++) {
String cur = longestPalindrome(str,i);
if(longestStr.length()<cur.length())
longestStr = cur;
}
return longestStr.replace("#","");
}
private static String longestPalindrome(String s,int index) {
int left = index-1;
int right = index+1;
while(left>=0 && right<s.length()){
if(s.charAt(left) == s.charAt(right)){
left--;
right++;
}else {
break;
}
}
return s.substring(left+1,right);
}