题解 | #合并回文子串#

合并回文子串

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

全部评论

相关推荐

虚闻松声:简历看起来很清爽。几点建议。 1. 总结提炼项目工作内容。如第一个项目第一点,研发用户信息管理、购票功能:(然后具体展开)。还可以继续总结,如基础功能开发、算法优化座位分配、并发性能提升等等 2. 优化技术栈描述。全文多次出现Spring Boot,我感觉一次就够了。可以不写或者写整个体技术架构? 3. 增加业务指标描述。最好有一些业务效果的指标。或者优化的效果指标等等。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务