给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
解题思路:中心扩散法,遍历字符串的每一个元素,通过中心向两边扩散,需要考虑回文字符串是奇数和偶数的情况
class Solution {
String str = "";
public String longestPalindrome(String s) {
for (int i = 0; i < s.length(); i++) {
// 回文字符串是奇数,如aba,那么第一次只取一个数字即可
doCompare(i, i, s);
// 回文子串是偶数,如aa,那么第一次需要取两个数
doCompare(i, i + 1, s);
}
return str;
}
public void doCompare(int m, int n, String s) {
//判断是否是回文字符串
while (m >= 0 && n < s.length() && s.charAt(m) == s.charAt(n)) {
m--;
n++;
}
// m、n当前是不符合回文字符串的值,符合的条件应该是m+1、n-1
// m、n的边界不能取,所以实际回文字符串的长度应该是n-1-(m+1)+1=n-m-1
if (n - m - 1 > str.length()) {
str = s.substring(m + 1, n);
}
}
}