题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af



public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    public int getLongestPalindrome (String A) {
        // write code here
        char[] cha = A.toCharArray();//将字符串转换为字符数组
        int len = A.length();//字符串的长度
        int count = 0;//计数器,统计最长回文子串的长度
        boolean[][] dp = new boolean[len][len];//动态dp数组
        for(int j=0;j<len;j++){//第一层,从纵坐标开始遍历
            for(int i=0;i<=j;i++){//第二层,从横坐标开始遍历
                if(i == j){//字符串长度为1时,必为回文字符串
                    dp[i][j] = true;//更新动态dp数组
                    if(dp[i][j]){//更新计数器
                        count = Math.max(count,j-i+1);
                    }
                }else if(i == j-1){//字符串长度为2时,如果两个字符相等,也是回文字符串
                    if(cha[i] == cha[j]){
                        dp[i][j] = true;//更新动态dp数组
                    }
                    if(dp[i][j]){//更新计数器
                        count = Math.max(count,j-i+1);
                    }
                }else if(j-i > 1){//字符串长度大于2时,如果两个字符相等并且dp[i+1][j-1]为真时,也是回文字符串
                    if(cha[i]==cha[j] && j>0 && i<len-1 && dp[i+1][j-1]){
                        dp[i][j] = true;//更新动态dp数组
                    }
                    if(dp[i][j]){//更新计数器
                        count = Math.max(count,j-i+1);
                    }
                }
            }
        }
        return count;
    }
}
全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务