题目
给定一个字符串,找出该字符串的最长回文子串。回文字符串指的就是从左右两边看都一样的字符串,如aba,cddc都是回文字符串。字符串abbacdc存在的回文子串有abba和cdc,因此它的最长回文子串为abba。
代码
public class LongPalindromic {
public static void main(String[] args) {
String str = "abcddccad";
String result = getPalindromic(str);
System.out.println(result);
}
private static String getPalindromic(String str) {
char[] ch = str.toCharArray();
String post = "";
String result = "";
//当回文字符串的长度为基数时
for (int i = 0; i < ch.length; i++) {
post = getSubstring(ch, i, i);
if (post.length() > result.length()) {
result = post;
}
}
//当回文字符串的长度为偶数时
for (int i = 0; i < ch.length; i++) {
post = getSubstring(ch, i, i + 1);
if (post.length() > result.length()) {
result = post;
}
}
return result;
}
private static String getSubstring(char[] ch, int i, int j) {
//从指定位置向两边移动来判断是否满足回文数
while(i >= 0 && j <= ch.length - 1 && ch[i] == ch[j]){
i--;
j++;
}
//当不满足条件的时候将不满足循环条件的上一个状态的字符串返回
return String.valueOf(ch).substring(i + 1, j);
//substring()方法方法用于提取字符串中介于两个指定下标之间的字符
//当substring(2,3)返回位置为2下表的字符。
}
}