最长回文子串
中等
给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
思路
首先是寻找回文串,那么当遍历到某个字符上时,传递到函数中去,判断这个字符的左右字符组成的字符串是否有回文串,有就返回这个字符串的长度,并且用两个指针作为标记,而一个字符可能出现的回文串有两种可能,以该字符为’a’为例,那么可能得结果有“bab”或者“baab”格式,所以在寻找回文串的函数中需要一个标记符,作为格式的标记,由此再在主函数中去寻找最长的字符串便得到了结果。
代码
class Solution {
public String longestPalindrome(String s) {
int start =0,end= 0;
int n = s.length();
String MaxS = "";
if(n<1){
return MaxS;
}
for(int i=0;i<n;i++){
int len1 = ifPalindrome(s,i,0);
int len2 = ifPalindrome(s,i,1);
int length =Math.max(len1,len2);
if(length>end-start){
start = i-(length-1)/2;
end = i+ length/2;
}
}
return s.substring(start,end+1);
}
public static int ifPalindrome(String s,int i,int t){
int left=i,right = i+t;
int sum = 0;
int n = s.length();
while(left>=0 && right<n&&s.charAt(left)==s.charAt(right)){
left--;
right++;
}
return right-left-1;
}
}