代码
public String longestPalindrome(String s) {
if(s.length()==0) return "";
int mark[][]=new int[s.length()][s.length()];
for(int i=0;i<s.length();i++)
{
mark[i][i]=1;
}
String result=Character.toString(s.charAt(0)); // 一个单词一定是回文
int nowmax=1;
for(int i=2;i<=s.length();i++) //依次切分成 2 个长度的子串 ----> n个长度的子串
{
for(int j=0;j<=s.length()-i;j++) //启示位置 0
{
// String temp = s.substring(j, j+i);
// StringBuilder tempsb = new StringBuilder(temp);
// String rstring = tempsb.reverse().toString();
// if(rstring.equals(temp))
// {
// result=temp;
// break;
// }
if(i==2) //如果规模是2 的话
{
if(s.charAt(j)==s.charAt(j+i-1)){//只要比较开头结尾是否相同
mark[j][j+i-1]=1;
result=s.substring(j, j+i);
}
else{
mark[j][j+i-1]=0;
}
}
else{
if(s.charAt(j)==s.charAt(j+i-1)) //头==尾部
{
if (mark[j+1][j+i-1-1]==1) {
result=s.substring(j, j+i);
mark[j][j+i-1]=1;
}
else{
mark[j][j+i-1]=0;
}
}else{
mark[j][j+i-1]=0;
}
}
}
}
return result;
}
思路
- 将整个字符串分成不同规模大小的子串,规模从1~字符串的长度
- 分别计算子串是否为回文串
- 这里我唯一优化的就是在判断一个子串是否为回文,我只要判断
1)子串开头结尾字符是否相同
2)子串去掉头尾字符是否是个回文 (前面的计算中记录下来)
同时满足前两个条件则是回文。
ps:这是我的个人随笔,有不对的地方或者没说明白的地方 见谅