您的位置:首页 > 编程语言

牛客网[编程题] 最长公共连续子串

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


输入描述:

输入为两行字符串(可能包含空格),长度均小于等于50.



输出描述:

输出为一个整数,表示最长公共连续子串的长度。



输入例子:

abcde
abgde



输出例子:

2

该题是动态规划中很典型的一种题型

package substring.largest.the;

import java.util.Scanner;
/*
* 两个字符串str1和str2,长度分别为a,b
* 建立状态转移矩阵a*b,先初始化第一行和第一列
* arr[i][j]=1+arr[i-1][j-1]
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str1=sc.nextLine();
String str2=sc.nextLine();
int result=solve(str1,str2);
System.out.println(result);
}

private static int solve(String str1, String str2) {
int a=str1.length();
int b=str2.length();
char[] arr1=str1.toCharArray();
char[] arr2=str2.toCharArray();
int[][] martix=new int[a][b];

//初始化matrix的第一行和第一列
for(int i=0;i<a;i++){
if(arr1[i]==arr2[0])
martix[i][0]=1;
}
for(int i=0;i<b;i++){
if(arr1[0]==arr2[i])
martix[0][i]=1;
}
//生成状态转移矩阵
for(int i=1;i<a;i++){
for(int j=1;j<b;j++){
if(arr1[i]==arr2[j])
martix[i][j]=martix[i-1][j-1]+1;
}
}
//返回martix数组中最大值
int max=0;
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
if(martix[i][j]>max)
max=martix[i][j];
}
}
return max;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: