字符串类型的题目很多都可以用双指针解决,这题是要在一个字符串中找到最长的回文子字符串,对于回文字符串,我们可以使用中心扩散的方式来寻找。
回文串有两种形式,一种是中心字符为奇数,另一种则是中心字符为偶数。因此采用中心扩散时,需要对两种形式的中心都进行处理,即从单个字符开始扩散和从两个字符开始扩散两种方式。
扩散就是利用双指针不断地向字符串的两端遍历,直到回文字符串条件不成立,终止遍历。
class Solution {
public String longestPalindrome(String s) {
int len = s.length()-1;
if(len<=0)return s;
String ans = s.substring(0,1);
int max = 0;
for(int i=0; i<len; i++){
String sub1 = sub(s,i,i);
String sub2 = sub(s,i,i+1);
if(sub1.length()>max || sub2.length()>max){
ans = sub1.length()>=sub2.length()?sub1:sub2;
max = ans.length();
}
}
return ans;
}
public String sub(String s, int i, int j){
while(i>=0 && j < s.length()){
if(s.charAt(i) == s.charAt(j)){
i--;
j++;
}else{
break;
}
}
return s.substring(i+1, j);
}
}