题解 | #合并回文子串#

合并回文子串

https://www.nowcoder.com/practice/2f43728b46744546b4ad7f4f0398054f

import java.util.Scanner;

public class Test6 {
    static boolean[][][][] dp;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();
        while (t-- > 0) {
            String a = scanner.next();
            String b = scanner.next();
            int na = a.length();
            int nb = b.length();
            dp = new boolean[100][100][100][100];
            int ans = 1;
            a = "#" + a;
            b = "#" + b;
            for (int lena = 0; lena <= na; ++lena) {
                for (int lenb = 0; lenb <= nb; ++lenb) {
                    for (int la = 1, ra = la + lena - 1; ra <= na; ++la, ++ra) {
                        for (int lb = 1, rb = lb + lenb - 1; rb <= nb; ++lb, ++rb) {
                            if (lena + lenb <= 1) {
                                dp[la][ra][lb][rb] = true;
                            } else {
                                dp[la][ra][lb][rb] = false;
                                if (lena > 1 && a.charAt(la) == a.charAt(ra)) {
                                    dp[la][ra][lb][rb] |= dp[la + 1][ra - 1][lb][rb];
                                }
                                if (lenb > 1 && b.charAt(lb) == b.charAt(rb)) {
                                    dp[la][ra][lb][rb] |= dp[la][ra][lb + 1][rb - 1];
                                }
                                if (lena != 0 && lenb != 0 && a.charAt(la) == b.charAt(rb)) {
                                    dp[la][ra][lb][rb] |= dp[la + 1][ra][lb][rb - 1];
                                }
                                if (lena != 0 && lenb != 0 && b.charAt(lb) == a.charAt(ra)) {
                                    dp[la][ra][lb][rb] |= dp[la][ra - 1][lb + 1][rb];
                                }
                            }
                            if (dp[la][ra][lb][rb]) {
                                ans = Math.max(ans, lena + lenb);
                            }
                        }
                    }
                }
            }
            System.out.println(ans);
        }
    }
}

全部评论

相关推荐

09-27 10:54
重庆大学 C++
人已微死:致敬传奇耐测王。
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
522090231:差评,我要让每一届都吃上这种苦头😡
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务