关闭

最长公共连续子串

标签: 牛客网面试在线编程
1408人阅读 评论(0) 收藏 举报
分类:

牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述:
输入为两行字符串(可能包含空格),长度均小于等于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();
    }
}
2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

poj 2774 最长公共子串--字符串hash或者后缀数组或者后缀自动机

http://poj.org/problem?id=2774 想用后缀数组的看这里:http://blog.csdn.net/u011026968/article/details/22801015 ...
  • u011026968
  • u011026968
  • 2014-08-10 00:46
  • 1776

poj之最长公共子序列和最长公共子串

题目:poj 1458   Common Subsequence Description A subsequence of a given sequence is the given sequen...
  • fangjian1204
  • fangjian1204
  • 2014-08-19 18:31
  • 1621

经典字符串算法 “最长上升子序列,最大连续子序列和,最长公共子串”

一、问题描述 这是三道典型的字符串dp问题。 最长上升子序列:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i 设dp[i]表示以i为结尾的最长递增子序列的长度,则状态转...
  • LGCSSX
  • LGCSSX
  • 2017-05-06 18:00
  • 1423

SPOJ1811最长公共子串问题(后缀自动机)

题目:http://www.spoj.com/problems/LCS/   题意:给两个串A和B,求这两个串的最长公共子串。   分析:其实本题用后缀数组的DC3已经能很好的解决,这里我们来...
  • ACdreamers
  • ACdreamers
  • 2013-08-31 16:54
  • 2856

SPOJ1812(后缀自动机求n个串的最长公共子串)

题目:http://www.spoj.com/problems/LCS2/   题意:给定n个串,求它们的最长公共子串。   思路就是:先将一个串建SAM,然后用后面的串去匹配,对于每一个串,...
  • ACdreamers
  • ACdreamers
  • 2013-08-31 20:09
  • 2123

Java——最长公共子串问题LCS

Java——最长公共子串问题LCS           求最长公共子序列(Longest Common Subsequence, LCS):如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字...
  • qq_29721419
  • qq_29721419
  • 2017-04-11 09:50
  • 473

最长公共子序列与最长公共子串(DP)

1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogsbelong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序...
  • u012102306
  • u012102306
  • 2016-11-16 11:14
  • 3842

动态规划:求最长公共子串/最长公共子序列

最长公共子序列和最长公共子串区别        最长公共子串(Longest Common Substring)与最长公共子序列(Longest Common Subsequence)的区别: 子串要...
  • u013074465
  • u013074465
  • 2015-04-30 11:30
  • 11811

sdut 1008 最大公共子串(求n个字符串的最长公共子串)

最大公共子串 题目描述 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下地字符按原来顺序组成的串。例如:“ ”,“a”,“xb”,“aaa”,“bbb”,“xabb”,“...
  • WEYuLi
  • WEYuLi
  • 2013-07-12 11:18
  • 2107

求两字符串最长公共连续子串---C++编程

题目:有两个字符串(可能包含空格),找出其中最长的公共连续子串,并输出其长度。  输入描述:输入为两行字符串(可能包含空格),长度均小于等于50。 输出描述:  输出为一个整数,表示最长公共连续子...
  • sinat_33718563
  • sinat_33718563
  • 2017-05-26 19:53
  • 964
    个人资料
    • 访问:138602次
    • 积分:4744
    • 等级:
    • 排名:第7079名
    • 原创:327篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论