题解 | #公共子串计算#动态规划+暴力

公共子串计算

https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b

import java.util.Arrays;
import java.util.Scanner;

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

    // 先找出所有的公共子串,不论长短
    static int dp(String s1, String s2) {
        String[][] d = new String[s1.length()][s2.length()];
        int maxLen = 0;
        for (int i = 0; i < s1.length() ; i++) {
            for (int j = 0; j < s2.length(); j++) {
                if (s1.charAt(i) == s2.charAt(j)) {
                    if (i - 1 < 0 || j - 1 < 0) {
                        d[i][j] = String.valueOf(s1.charAt(i));
                    } else {
                        d[i][j] = d[i - 1][j - 1] + String.valueOf(s1.charAt(i));
                    }
                } else {
                    d[i][j] = String.valueOf("");
                }
                maxLen = Math.max(maxLen, d[i][j].length());
            }
        }
        return maxLen;
    }

    // 暴力 找出所有子串,然后比较
    static int bruteForce(String s1, String s2) {
        int len = s1.length();
        while (len > 0) {
            for (int i = 0; i + len - 1 < s1.length(); i++) {
                String sub = s1.substring(i, i + len);
                if (s2.contains(sub)) {
                    return len;
                }
            }
            len--;
        }
        return 0;
    }
}

全部评论

相关推荐

Hyh_111:像这种hr就不用管了,基本没啥实力,换一个吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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