最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
思路:中心扩展
public class Test {
/* 寻找最长回文子串函数 */
public static String longestPalindrome(String s) {
/* 如果s串为空 直接返回*/
if(s.equals("")){
return s;
}
/* 将每个字符前后添加字符# 以便后续操作 */
int length = s.length();
for (int i = 0; s.length() < 2*length + 1 ; i+=2) {
s = s.substring(0,i) + "#" + s.substring(i);
}
/* 寻找最长回文位置和长度 */
int max = 0;
int location = -1;
for (int i = 1; i < s.length(); i++) {
int max_now = 1;
while(true){
if(i - max_now >= 0 && i + max_now < s.length() && s.charAt(i - max_now) == s.charAt(i + max_now)){
if(max_now > max){
max = max_now;
location = i;
}
max_now += 1;
}else{
break;
}
}
}
/* 根据最长回文位置截取字符串 */
s = s.substring(location - max,location + max + 1);
/* 将议添加的自定义的字符删除 */
String replace = s.replace("#", "");
return replace;
}
public static void main(String[] args) {
//String str = "";
String str = "babbad";
//String str = "a";
System.out.println(longestPalindrome(str));
}
}