牛客春招刷题训练营 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写算法