牛客春招刷题训练营 3月25日 Java 查找两个字符串a,b中的最长公共子串 构造C的歪

#牛客春招刷题训练营# + https://www.nowcoder.com/discuss/726480854079250432

题目地址

https://www.nowcoder.com/practice/56735b3fe2fc4ed5916f5427dc787156?channelPut=w25springcamp

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506?channelPut=w25springcamp

查找两个字符串a,b中的最长公共子串

子串必须是连续的

那么 dp[i][j] 的状态只能由 dp[i-1][j-1] 得到

可以跟力扣上的最长公共子序列类比

差不多

可以做一下*******

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str1 = in.next();
        String str2 = in.next();

        // 输出在较短串里先出现的那一个
        if(str1.length()>str2.length()){
            String ans=str1;
            str1=str2;
            str2=ans;
        }

        int n=str1.length();
        int m=str2.length();
        int dp[][]=new int[n+5][m+5];

        int max=0;
        String str="";

        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(str1.charAt(i-1)==str2.charAt(j-1)){
                    dp[i][j]=dp[i-1][j-1]+1;
                }
                if(dp[i][j]>max){
                    // 记录字符串
                    str=str1.substring(i-max-1,i);
                    max=Math.max(dp[i][j],max);
                }
            }
        }
        // System.out.println(max);
        System.out.println(str);
    }
}

构造C的歪

直接构造差 然后 相 加

构成等差数列

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int a = in.nextInt();
        int b = in.nextInt();
        System.out.println(a+(a-b));
    }
} 
#牛客春招刷题训练营#
牛客算法 校招 Java 合集 文章被收录于专栏

Java写算法

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务