//给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
// 示例 1:
// 输入: "babad"
//输出: "bab"
//注意: "aba" 也是一个有效答案。
// 示例 2:
// 输入: "cbbd"
//输出: "bb"
// Related Topics 字符串 动态规划
// 中心法,从中间往两侧递推时间复杂度(O(n2))
public String longestPalindrome(String s) {
char[] chars = s.toCharArray();
String str = "";
//从左开始往右侧遍历找
for (int i = 0;i<chars.length;i++){
int j = 1;
while (i+j<chars.length && i-j>=0){//没到结尾就可以继续
//如果字符串全部为回文直接返回
if (i+2*j >= str.length())return s;
//判断中间往左右两个字符是否相同,不同是判断是否比之前最大的大,如果大则更新
if (!(chars[i+j] == chars[i-j])){
if (2*j+1>str.length()) {
str = s.substring(i-j+1,i+j);
break;
}
}
j++;
}
}
return str;
}