题解 | #密码截取#

密码截取

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();
        int[][] maxLen = new int[line.length()][line.length()];

        for (int i = 0; i < line.length(); i++) {
            maxLen[i][i] = 1;
            if (i > 0 && line.charAt(i) == line.charAt(i - 1)) {
                maxLen[i-1][i] = 2;
            }
            else if (i > 0 && line.charAt(i) != line.charAt(i - 1)) {
                maxLen[i-1][i] = 1;
            }
        }

        for (int i = 2; i < line.length(); i++) {
            for (int j = 0; j + i < line.length(); j++) {
                if (line.charAt(j) == line.charAt(j + i) && maxLen[j + 1][j + i - 1] == i - 1) {
                    maxLen[j][j+i] = i + 1;
                }
                else {
                    if (maxLen[j][j+i-1] > maxLen[j+1][j+i]) {
                        maxLen[j][j+i] = maxLen[j][j+i-1];
                    }
                    else {
                        maxLen[j][j+i] = maxLen[j+1][j+i];
                    }
                }
            }
        }
        System.out.println(maxLen[0][line.length() - 1]);
    }
}

maxLen[i][j]为str[i,j]内部最长对称字串

若c[i]==c[j], 且str[i+1, j-1]为对称字串,则str[i,j]也为对称字串

若c[i]!=c[j],则maxLen[i][j] = max{ maxLen[i+1][j], maxLen[i][j-1] }

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务