leetcode5:给你一个字符串 s
,找到 s
中最长的回文子串。
例如:输入s = "ababd",输出"bab"
面对回文问题,可以使用中心扩散法解决。中心扩散法表示从一个字符开始,从他的两侧依次拓展。在拓展时,需要考虑奇偶问题。
奇数:"ababd", 从第三个字符"a"开始拓展。
偶数:"abb",从第二个字符"bb"开始拓展。
所以面对奇数和偶数两种情况需要同时比较,选取其中拓展后字符数目较多的那一种情况。首先定义中心扩散计算函数,返回最长回文子串。
public String func(int left,int right,String s){
String temp = "";
while(left >= 0 && right < s.length()){
if(s.charAt(left) == s.charAt(right)){
temp = s.substring(left,right + 1);
left--;
right++;
}
else{break;}
}
return temp;
}
其中left和right表示左右指针。如果是奇数,传入的参数是(i,i,s)。如果是偶数,传入的参数是(i,i+1,s)。比较奇数和偶数返回的回文子串的长度,选择长的那个记录下最长回文子串。
public String longestPalindrome(String s) {
String ans = "";
for(int i = 0;i < s.length();i++){
String str1 = func(i,i,s);
String str2 = func(i,i + 1,s);
String str3 = "";
if (str1.length() > str2.length()){str3 = str1;}
else{str3 = str2;}
if(str3.length() > ans.length()){ans = str3;}
}
return ans;
}