牛客网[编程题] 最长公共连续子串
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; } }
相关文章推荐
- [编程题] 最长公共连续子串(美团点评2017秋招)
- [编程题] 最长公共连续子串
- 美团2017编程题—拼凑钱币&大富翁游戏&最大矩形面积&最长公共连续子串
- 【编程题】最长公共连续子串
- URAL 1517. Freedom of choice(后缀数组:最长公共连续子串)
- 字符串操作:两个字符串的最长连续公共子串
- 最长公共子串(连续)问题
- 动态规划-----最长公共连续子串
- 求最长连续公共子串
- 两个字符串的最长公共子串(子串为连续的)
- 动态规划 最长公共子序列LCS、最长公共连续子串、最长重复子串
- 利用后缀树求多个字符串的最长公共连续子串(Longest Common Substring)
- 求两个字符串的(连续的)最长公共子串
- 常见编程——最长公共子序列(不连续)和最长公共子串(连续)
- 最长公共子序列(LCS)和最长公共连续子串
- 最长公共子串(连续)问题
- 求两个字符串的最长连续公共子串
- 最长连续公共子串
- 两个字符串的最长连续公共子串
- 最长递增子序列(nlogn),最长公共子串(连续),最长公共子序列(不连续)