
如下图是解题思路
1:首先区分构成回文子串的两种情况:
(1):回文子串为基数个,有中心元素,例如:aba
(2):回文子串有偶数个,无中心元素,例如:abba
2:利用helper函数,来判断left和right是否越界,且对应的字符是否一致
3:遍历目标字符串,调用函数:
helper(i-1,i+1,s);
helper(i,i+1,s);
来求出回文子串

class Solution {
int maxLength=1;//记录回文子串的最大长度
int start=0;//记录回文子串的起始
public String longestPalindrome(String s) {
if(s.length()<2) return s;
for(int i=0;i<s.length();i++){
helper(i-1,i+1,s);
helper(i,i+1,s);
}
return s.substring(start,start+maxLength);
}
void helper(int left,int right,String s){
while(left>=0&&left<=right&&right<s.length()&&s.charAt(left)==s.charAt(right)){//对边界值进行判断
if((right-left+1)>maxLength){
maxLength=right-left+1;//更新回文子串的最大长度
start=left;
}
left--;
right++;
}
}
}
网友评论