回文
,是指数或者字符串具有首尾回环性质,从后向前按位颠倒后与原文一样。首尾回环的数字就是回文数,如:121,12321;首尾回环的字符串就是回文串,如:’madam’。
代码
import java.util.LinkedList;
import java.util.List;
/**
* 给定一个字符串,找出最长的回文字符串
* @author SongHongWei
*
*/
public class Client {
public static void main(String[] args) {
String str = "11234432112345677654321123456789987654321";
Client c = new Client();
if (c.isPlalindromeStr(str)) {
System.out.println(str);
} else {
c.printPlanindromeStr(str, str.length() - 2);
}
}
/**
* 判断制定字符串是不是回文字符串
*
* @param str
* @return
*/
public boolean isPlalindromeStr(String str) {
char[] strArray = str.toCharArray();
int i = 0;
int j = str.length() - 1;
while (i <= j) {
if (strArray[i] == (strArray[j])) {
i++;
j--;
} else {
return false;
}
}
return true;
}
/**
* 获取指定字符串长度为length的所有子串
*
* @param str
* @param length
* @return
*/
public List<String> getAllSubString(String str, int length) {
List<String> listStr = new LinkedList<String>();
// int count = str.length() - length;
int len = str.length();
int i = 0;
while (i + length <= len) {
listStr.add(str.substring(i, i + length));
i++;
}
return listStr;
}
/**
* 打印出回文字符串
*
* @param str
* @param length
*/
public void printPlanindromeStr(String str, int length) {
boolean flag = false;
List<String> allSubString = getAllSubString(str, length);
for (String string : allSubString) {
if (isPlalindromeStr(string)) {
System.out.println(string);
System.out.println(string.length());
flag = true;
break;
}
}
if (!flag) {
printPlanindromeStr(str, length - 1);
}
}
}