给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题代码:
public StringlongestPalindrome(String s) {
if (s ==null | s.isEmpty()) {
return "";
}
String maxStr = s.charAt(0) +"";
for (int i=0; i < s.length(); i++) {
int head = i;
int tail = i;
// if (maxStr.length() >= s.length() - tail) {
// break;
// }
String str = cacluateString(s, head, tail);
if (((tail +1) < s.length()) && (s.charAt(head) == s.charAt(tail +1))) {
tail = i +1;
String str2 = cacluateString(s, head, tail);
if (str2.length() > str.length()) {
str = str2;
}
}
if (str.length() > maxStr.length()) {
maxStr = str;
}
}
return maxStr;
}
private StringcacluateString(String s, int head, int tail) {
while (head >=1 && tail < s.length() -1) {
if (s.charAt(head -1) == s.charAt(tail +1)) {
head--;
tail++;
}else {
break;
}
}
return s.substring(head, tail+1);
}