class Solution {
public String longestPalindrome(String s) {
if(s==null||s.length()==0){
return "";
}
int strlen=s.length();
int left=0;
int right=0;
int len=1;
int maxStart=0;
int maxLen=0;
for(int i=0;i<strlen;i++){
left=i-1;
right=i+1;
while(left>=0&&s.charAt(left)==s.charAt(i)){
len++;
left--;
}
while(right<strlen&&s.charAt(right)==s.charAt(i)){
len++;
right++;
}
while(left>=0&&right<strlen&&s.charAt(right)==s.charAt(left)){
len+=2;
left--;
right++;
}
if(len>maxLen){
maxLen=len;
maxStart=left;
}
len=1;
}
return s.substring(maxStart+1,maxStart+maxLen+1);
}
}
这道题目的解法总结如下
首先我们要去明白这个最长回文字串的相关的意思
之后
对这个字符串的判断要分成多种的情况
也要考虑字母和数字同时存在的相关的状况
但是其实他们的本质上也都是字符串所以也不需要进行一个过多的进行考虑
本题最容易想到的一种方法应该就是 中心扩散法。
中心扩散法怎么去找回文串?
从每一个位置出发,向两边扩散即可。遇到不是回文的时候结束。举个例子,str=acdbbdaa 我们需要寻找从第一个 b(位置为 3)出发最长回文串为多少。怎么寻找?
首先往左寻找与当期位置相同的字符,直到遇到不相等为止。
然后往右寻找与当期位置相同的字符,直到遇到不相等为止。
也同时存在着两边都相等的很爽的情况了
这时候嘛
我们就可以两边分别进行一个相关的操作
同样的如果我们这个字符串的空间存储不够了,进行扩容就可以了