您的位置:首页 > 其它

最长公共连续子串

2017-03-25 20:33 253 查看
牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。

输入描述:

输入为两行字符串(可能包含空格),长度均小于等于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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: