给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
示例 3:
输入:s = "a" 输出:"a"
示例 4:
输入:s = "ac" 输出:"a"
提示:
- 1 <= s.length <= 1000
- s 仅由数字和英文字母(大写和/或小写)组成
class Solution {
public String longestPalindrome(String s) {
String max = new String();
int tmp;
for(int i = 0; i < s.length(); ++i){
// 记录重复的字母出现的下标
tmp = s.lastIndexOf(s.charAt(i), s.length());
// 从i开始,到出现重复字母的地方进行判断是不是回文,直到找不到为止。同时要更新tmp的位置。
while(tmp != -1 && tmp >= i) {
// 如果已知有一段回文,比我最长的重复字母的字符串还要长,那么就不用看了,算了也是白算。
if(max.length() >= tmp + 1 - i){
break;
}
// 如果是回文,判断长度,修改max。因为这时候的字符串必定比我们的max长。
if(isHuiwen(s.substring(i, tmp + 1))){
max = s.substring(i, tmp + 1);
// 接下来找到的回文长度不可能有我长,就直接退出循环
if(s.length() - i <= max.length()){
System.out.println(max);
return max;
}
// 我从最长的重复字符开始查找,如果找到了,就是以这个字符开头,最长的回文
break;
}
// 修改下一个重复字母的下标位置
tmp = s.lastIndexOf(s.charAt(i), tmp - 1);
}
}
System.out.println(max);
return max;
}
public boolean isHuiwen(String str){
for(int low = 0, high = str.length() - 1; low < high; ++low, --high){
if(str.charAt(low) != str.charAt(high)){
return false;
}
}
return true;
}
}



