题解 | #公共子串计算#

公共子串计算

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

import java.util.Scanner;
import java.util.TreeSet;

// 方法一利用   1.contains函数判定子串是否存在 2.利用substring函数截取子串
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        TreeSet<String> vals=new TreeSet<String>();
        String min=new String();
        String max=new String();
        int sum=0;
        if (str1.length()>str2.length()) {
            min=str2;
            max=str1;
        }else {
            min=str1;
            max=str2;
        }
        for (int i = 0; i < min.length(); i++) {
            for (int j = i  ; j <min.length(); j++) {
                if(max.contains(min.substring(i,j+1))){
                    sum=Integer.max(sum,min.substring(i,j+1).length());
                }
            }
        }
        System.out.println(sum);
    }
}

import java.util.Scanner;
import java.util.TreeSet;

// 方法二 动态规划
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        int max = 0;
        int[][] dp = new int[str1.length() + 1][str2.length() + 1];
		//初始化dp数组
        for (int i = 1; i <= str1.length(); i++) {
            for (int j = 1; j <= str2.length(); j++) {
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    dp[i][j] = 1;
                } else {
                    dp[i][j] = 0;
                }
            }
        }
	  
        for (int i = 1; i <= str1.length(); i++) {
            for (int j = 1; j <= str2.length(); j++) {
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    dp[i][j] += dp[i - 1][j - 1];
                    max = Math.max(dp[i][j], max);
                } else {
                    dp[i][j] = 0;
                }
            }
        }
        System.out.println(max);

    }
}

华为OD机试 文章被收录于专栏

自己在准备机试,记录一下学习轨迹,主要参考真题,代码大部分是自己想的,不保证ac,仅供参考

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务