什么是回文串?
回文串是指正着读和反着读都一样的字符串。例如:
-
"a"、"aba" 是回文串
-
"ab"、"abc" 不是回文串
寻找最长回文子串是字符串处理中的经典问题,在算法面试和实际开发中都经常遇到。
中心扩散法原理
中心扩散法的核心思想是:从字符串的每一个位置出发,向两边扩散,寻找以该位置为中心的回文子串。
由于回文串的长度可能是奇数或偶数,我们需要考虑两种情况:
-
奇数长度:以单个字符为中心向两边扩展
-
偶数长度:以两个相同字符为中心向两边扩展
完整代码实现
public class LongestPalindrome {
private static int[] expandAroundCenter(String s, int left, int right) {
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
return new int[] {left + 1, right -1};
}
public static String longestPalindrome(String s) {
if(null == s || s.length() == 0) {
return "";
}
int[] result = new int[] {0, 0};
for(int i = 0; i < s.length(); i++) {
int[] odd = expandAroundCenter(s, i, i);
int[] even = expandAroundCenter(s, i, i + 1);
int[] resultTemp = new int[] {0, 0};
if(odd[1] - odd[0] > even[1] - even[0]) {
resultTemp = odd;
}else {
resultTemp = even;
}
if(resultTemp[1] - resultTemp[0] > result[1] - result[0]) {
result = resultTemp;
}
}
return s.substring(result[0], result[1] + 1);
}
public static void main(String[] args) {
System.out.println(longestPalindrome("a"));
System.out.println(longestPalindrome("aba"));
System.out.println(longestPalindrome(null));
System.out.println(longestPalindrome("abba"));
}
}

被折叠的 条评论
为什么被折叠?



