题解 | #最长回文子串#
最长回文子串
https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
public int fun(String a,int begin,int end){
//定义一个函数fun可根据字符串a从任意两点(若奇数展开则两点都为i,偶数展开两点为i和i+1)向两边展开并求得相同子串的长度
while(begin>=0&&end<=a.length()-1&&a.charAt(begin)==a.charAt(end)){
begin=begin-1;end=end+1;
}
return end-begin+1-2;
//end-begin+1是从索引begin到索引end的子串长度,由于while循环结束时begin额外减了1,end额外加了1,所以实际长度要再减去2
}
public int getLongestPalindrome (String A) {
// write code here
int maxlen=1;//初始最大回文子串为1
for(int i=0;i<A.length()-1;i++)//遍历A,从索引i处向两边展开,由于每一个索引处必须考虑奇数(begin=i,end=i)和偶数(begin=i,end=i+1)两种展开方式并取最大值,所以索引最多遍历到A.length()-2处,也就是倒数第二个字符
maxlen=Math.max(maxlen,Math.max(fun(A,i,i),fun(A,i,i+1)));
//这里用到递归思想,maxlen一定是取这次遍历和上次遍历中的最大值,然后这次遍历又分为奇数(begin=i,end=i)和偶数(begin=i,end=i+1)两种展开方式,取其中的最大值
return maxlen;
}
}