题目
给你一个字符串 s
,找到 s
中最长的回文子串。
题解
核⼼思想是:对于字符串中每个字符都从中间开始向两边扩散来判断回⽂串。
传入两个指针 i 和 j,实现同时处理回⽂串长度为奇数和偶数的情况。
class Solution {
public String longestPalindrome(String s) {
String res = new String();
for(int i = 0; i < s.length(); i++){
// 以s[i]为中心的回文子串
String s1 = Palindrome(s, i, i);
// 以s[i]和s[i + 1]为中心的回文子串
String s2 = Palindrome(s, i, i + 1);
// res = Longest(res, len1, len2)
res = res.length() >= s1.length() ? res : s1;
res = res.length() >= s2.length() ? res : s2;
}
return res;
}
private String Palindrome(String s, int i, int j){
while(i >= 0 && j < s.length() && s.charAt(i) == s.charAt(j)){
i--;
j++;
}
return s.substring(i + 1, j); // [start, end)
}
}