题目:有两个字符串(可能包含空格),找出其中最长的公共连续子串,并输出其长度。 

输入描述:输入为两行字符串(可能包含空格),长度均小于等于50。
输出描述:  输出为一个整数,表示最长公共连续子串的长度。
输入例子:
abcde
abgde
输出例子:
2

两种参考思路如下:
(1)假设两个字符串str1和str2的长度分别为m和n,构建一个矩阵(即二维数组)M[m][n],初始值都设为0,如果字符串str1中

第i个字符str[i-1](下标从零开始)与字符串str2中第j个字符串str[j-1]相等,则将matric[i][j]设为1。最后统计矩阵M中对角线最大的连续1的个数,

即为两字符串最长公共子串。注:如不好理解,可以画图辅助。

/*例如:str1: abcde    str2: abgde  
                matrix = [ 1  0  0  0  0 
                 0  1  0  0  0
                 0  0  0  0  0
                 0  0  0  1  0
                 0  0  0  0  1 ]
   斜线上连续的1的最大个数为2,所以最长公共连续子串长度为2*/ 是每条对角线,而不只是主对角线。
参考代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
  {
      char str1[51],str2[51];
      int matric[51][51]={0};       
      int  MaxLen=0;
      gets(str1);   //cin.getline(str1,51);
      gets(str2);
      for(int i=0;str1[i]!='\0';i++)      //如果两个位置的元素相等,矩阵值为1
        {
           for(int j=0;str2[j]!='\0';j++)
              {
                 if(str1[i]==str2[j])
                     matric[i][j]=1;
              }
        }      
      for(int i=0;str1[i]!='\0';i++)      //依次找对角线最大连续1的个数
        {
           for(int j=0;str2[j]!='\0';j++)
              {
                 int m=i;
                 int n=j;
                 int len=0;
                 while(matric[m++][n++]==1)
                     len++;
                 if(MaxLen<len)
                     MaxLen=len;
              }
       }
     cout<<MaxLen<<endl;
  }
(2)运用动态规划的思想。

解题思路:

这题其实是动态规划的变形经典题型,应用动态规划的思想,创建一个二维数组dp[n][n],其中dp[i][j],表示取到s1[i]和取到s2[j]时的最大连续子串长度。如果s1[i]等于s2[j],则dp[i-1][j-1]等于取到s1[i-1]和取到s2[j-1]时的最大连续子串长度加1,即

dp[i][j]=dp[i-1][j-1]+1。

#include <stdio.h>
#include <string.h>
#define N 50
int main(){
    chars1[N],s2[N];
    intdp[N][N],i,j,max_len=0;
    gets(s1);
    gets(s2);
    for(i=0;i<strlen(s1);i++){
        for(j=0;j<strlen(s2);j++){
            if(s1[i]==s2[j]){
                if(i>0&&j>0){
                    dp[i][j]=dp[i-1][j-1]+1;
                }else{
                    dp[i][j]=1;
                }
                if(max_len<dp[i][j]){
                    max_len=dp[i][j];
                }
            }
        }
    }
    printf("%d\n",max_len);
    return0;
}

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

  1. 【算法】算法测试题4:最长公共连续子串

    问题描述 链接:https://www.nowcoder.com/ques... 来源:牛客网 给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度. 输入描述 输入为两行字符串(可 ...

  2. 最长公共连续子串LCS

    (对比最长公共连续子序列) 暴力n3 用dp来优化 简书:https://www.jianshu.com/p/730a78212c65 CSDN:https://blog.csdn.net/ten_s ...

  3. 美团点评_给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。

    给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度. import java.util.*; public class Meituan_4 {public static void ...

  4. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  5. java 求最长重复子串_给定一个字符串,求出其最长的重复子串。

    #include #include #include #include using namespace std; //给定一个字符串,求出其最长的重复子串 //方法一 string lsubstr_1 ...

  6. 数据结构 - 字符串 - 最长公共子序列 + 最长公共子字符串 - 动态规划

    最长公共子序列 /*** 最长公共子序列* 参考链接:http://blog.csdn.net/biangren/article/details/8038605* Created by 18710 o ...

  7. BNUOJ 4215 最长公共连续子序列

    最长公共连续子序列 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class na ...

  8. 字符串最长回文子串_最长回文子串

    字符串最长回文子串 Problem statement: 问题陈述: Given a string str, find the longest palindromic substring. A sub ...

  9. java 求两线交点_JAVA求两直线交点和三角形内外心的编程代码

    JAVA求两直线交点和三角形内外心的编程代码 一.求两直线交点 复制代码 代码如下: class Point { double x; double y; public Point() { this.x ...

最新文章

  1. 今日头条李磊等最新论文:用于文本生成的核化贝叶斯Softmax
  2. 如何快速融入团队(六)
  3. Python中type()详解:动态创建类
  4. Fiddler抓取https相关设置
  5. java html entity encoding,实体“HTML.Version”的声明必须以''结尾
  6. java面向对象高级分层实例_接口类
  7. PTA-7-3 A除以B (10分)
  8. linux服务进程文件,[Linux实用命令]-6-服务与进程管理
  9. JS 数组去重的几个方法
  10. linux sudo输入密码无法获得锁,Linux系统提示无法获得锁/var/lib/dpkg/lock怎么办?
  11. mybatis多对一,一对一,多对多resultMap映射,pojo映射,传参集合,封装的对象传参
  12. java兄弟_java实现兄弟孩子树代码
  13. solidity教程【0.5.7】
  14. 一不做,二不休, 干脆把开局库更换的批处理文件也调试好放出来...
  15. vue3 tinymce富文本插件
  16. 浏览历史记录通用代码
  17. 【Python】音节判断
  18. 计算机启动硬盘自检,启动时硬盘自检?这样处理就没事了
  19. 软件充值功能测试点有哪些?以手机话费充值为例
  20. tar -zxvf是什么意思

热门文章

  1. [oracle 10g]命令行启动ORACLE服务及顺序
  2. Linux平台-小型企业DHCP服务器的搭建
  3. Linux shell配置环境变量
  4. 京东购物车双11实战
  5. 数据结构与算法之-----二叉树(一)
  6. mysql多索引结构_MySQL-索引结构详解
  7. 机械硬盘旋转时间_高端PC真的没有机械盘了么?
  8. 2021泰安市地区高考成绩排名查询,2021年山东高考成绩排名及一分一段表
  9. hbase针对fullgc所做的优化(Memstore所作的优化 针对BlockCache所作优化)
  10. 沉迷Link-Cut tree无法自拔之:[BZOJ2594][Wc2006]水管局长数据加强版