题解 | #最长回文子串#

最长回文子串

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;
    }
}

全部评论

相关推荐

01-17 12:35
吉首大学 Java
秋招之BrianGriffin:自己的工作自己做!😡
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务