牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述:
输入为两行字符串(可能包含空格),长度均小于等于50.
输出描述:
输出为一个整数,表示最长公共连续子串的长度。
输入例子:
abcde
abgde
输出例子:
2
PS:这道题不得不说真的很坑,先不说空格也算成字符,连最长公共连续子串这个概念也和刷传统相关题用的概念也一样。
代码如下:
import java.util.Scanner;
/**
* @author Administrator
*
*/
public class Main {
static String str1;
static String str2;
static int[][] dp;
static int Max;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
str1 = in.nextLine();
str2 = in.nextLine();
int len1 = str1.length();
int len2 = str2.length();
if ( len1 < 1 || len2 < 1){
System.out.print(0);
}
dp = new int[str1.length()+1][str2.length()+1];
char[] ch1 = str1.toCharArray();
char[] ch2 = str2.toCharArray();
for ( int i = 0 ; i < len1 ; i++){
if ( ch1[i] == ch2[0]){
dp[i][0] = 1;
}
}
for ( int i = 0 ; i < len2 ; i++){
if ( ch2[i] == ch1[0]){
dp[0][i] = 1;
}
}
Max = dp[0][0];
for ( int i = 1 ; i < len1 ; i++){
for ( int j = 1 ; j < len2 ; j++){
if ( ch1[i] == ch2[j]){
dp[i][j] = dp[i-1][j-1]+1;
}
if ( dp[i][j] > Max){
Max = dp[i][j];
}
}
}
System.out.print(Max);
in.close();
}
}