题解 | #密码截取#动态归划

密码截取

https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

import java.util.Scanner;

// 如果最大回文子串的长度等于字符串长度,则说明是回文字符串
// 一个回文串的两端相同,去掉两端后还是回文串
// 采用动归的方式不段求最大回文子串长度
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        int len = input.length();
        int[][] dp = new int[len][len];
        for (int i = len - 1; i >= 0; i--) { // 横向遍历
            dp[i][i] = 1; // 单个字符串就是回文字符串
            for (int j = i + 1; j < len; j++) { // 非单个字符的判断,纵向遍历
                if (input.charAt(i) == input.charAt(
                            j)) { // 两边字符相同,判断内部是否是回文串
                    if (j - i - 1 == dp[i + 1][j -
                                               1]) { // 如果是回文串,则最大回文子串长度等于字符串长度
                        dp[i][j] = dp[i + 1][j - 1] + 2; // 回文串长度加2
                        continue;
                    }
                }
                // 不是回文串,则最长回文子串的长度在内部
                dp[i][j] = Math.max(
                               dp[i + 1][j], // 左边的一个
                               dp[i][j - 1] // 右边的一个
                           );
            }
        }
        System.out.println(dp[0][len - 1]);
    }
}

#最长回文子串#
全部评论

相关推荐

04-03 12:09
東京大学 C++
求求求求暑期offer:留第一行,剩下的不要
点赞 评论 收藏
分享
xwqlikepsl:感觉很厉害啊,慢慢找
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务