题干:

描述

编写一个程序,求两个字符串的最长公共子串。输出两个字符串的长度,输出他们的最长公共子串及子串长度。如果有多个最长公共子串请输出在第一个字符串中先出现的那一个。

特别注意公共子串中可能包含有空格,但不计回车符!

输入

两个字符串,回车结尾,每个字符串中都可能含有空格(每个字符串的长度不超过200个字符)

输出

一共有四行,前两行以Length of String1:和Length of String2:开始冒号后面分别输出两字符串的长度。 第三行Maxsubstring:输出符合题目里描述的子串。第四行是Length of Maxsubstring:加子串长度。注意!冒号后面不要输出多余的空格!

输入样例 1

this is a string
my string is abc

输出样例 1

Length of String1:16
Length of String2:16
Maxsubstring: string
Length of Maxsubstring:7

输入样例 2

abcdef
defabc

输出样例 2

Length of String1:6
Length of String2:6
Maxsubstring:abc
Length of Maxsubstring:3

输入样例 3

aabbcc
aabbcc

输出样例 3

Length of String1:6
Length of String2:6
Maxsubstring:aabbcc
Length of Maxsubstring:6

来源

QDU

解题报告:

刚开始写成了最长公共子序列了、、、对于从0开始读入的字符串问题(即cin>>s而非cin>>s+1),还调试了老半天。。结果发现题目要求公共子序列。。。数据量不大才两百个字符,果断从高往低枚举就好了。。。如果字符数多了可以二分加速一下。、

AC代码:

#include<cstdio>
#include<queue>
#include<string>
#include<cstring>
#include<cmath>
#include<map>
#include<iostream>
#include<algorithm>
#define ll long long
const ll mod = 1e9+7;
using namespace std;
char s1[5005],s2[5005],tmp[5005];
//string s1,s2;
int dp[5500][5500];
int main()
{cin.getline(s1+1,1004);cin.getline(s2+1,1004);int len1 = strlen(s1+1);int len2 = strlen(s2+1);
//  if(s1[0] == s2[0]) dp[0][0] = 1,dp[1][0] = 1,dp[0][1] = 1;
//  if(s1[1] == s2[0]) dp[1][0] = 1;
//  if(s1[0] == s2[1]) dp[0][1] = 1;
//  for(int i = 1; i<=len1; i++) {
//      for(int j = 1; j<=len2; j++) {
//          if(s1[i] == s2[j]) dp[i][j] = dp[i-1][j-1]+1;
//          else dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
//      }
//  }
//  int ans = dp[len1][len2];//printf("ans = %d\n",ans);int ans,flag = 0;for(ans = len1; ans >=0; ans--) {for(int i = 1; i<=len1-ans+1; i++) {for(int j = 0; j<ans; j++) tmp[j] = s1[i+j];tmp[ans] = '\0';//printf("tmp=%s\n",tmp);if(strstr(s2+1,tmp) != NULL) {flag = 1;break;}}if(flag) break;}printf("Length of String1:%d\n",len1);printf("Length of String2:%d\n",len2);printf("Maxsubstring:%s\n",tmp);printf("Length of Maxsubstring:%d\n",ans);return 0 ;
}

【qduoj - 夏季学期创新题】最长公共子串(水题暴力枚举,不是LCS啊)相关推荐

  1. 【qduoj - 夏季学期创新题】C语言课程设计-阶梯问题(dp,高精度大数)

    题干: 描述 N级阶梯,人可以一步走一级,也可以一步走两级,求人从阶梯底端走到顶端可以有多少种不同的走法. 输入 一个整数n,代表台阶的阶数. 输出 求人从阶梯底端走到顶端可以有多少种不同的走法,输出 ...

  2. 【qduoj - 夏季学期创新题】矩形剖分(递归,dp)

    题干: 描述 对一个给定的矩形,将其划分成尽可能少的正方形,输出正方形的最少个数.例如,如下图所示的情况,则输入为3和4,输出为4. 输入 输入两个整数中间用空格分开. 输出 输出最少分割成的正方形的 ...

  3. 【qduoj - 夏季学期创新题】骑士游历(递推dp)

    题干: 描述 输入 输入包含多组数据,第一行T表示数据组数接下来每行六个整数n,m,x1,y1,x2,y2(分别表示n,m,起点坐标,终点坐标) 输出 输出T行,表示起点到终点的路径数 输入样例 1 ...

  4. 程序员面试题精选100题(20)-最长公共子串[算法]

    题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串.注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中.请编写一个函数,输入两个字符串, ...

  5. 牛客题霸 [最长公共子串]C++题解/答案

    牛客题霸 [最长公共子串]C++题解/答案 题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1 题解: lcs模板 代码: class Solut ...

  6. 【qduoj】最长公共子串

    题干: 描述 编写一个程序,求两个字符串的最长公共子串.输出两个字符串的长度,输出他们的最长公共子串及子串长度.如果有多个最长公共子串请输出在第一个字符串中先出现的那一个. 特别注意公共子串中可能包含 ...

  7. Leetcode刷题-最长公共前缀

    Leetcode刷题-最长公共前缀 简介 题目 个人答案及结果 学习一下官方的 简介 最近尝试下大家口口相传的神器 leetcode-cn.com,大家自己注册就可以选择题库进行使用了.我都会先自己出 ...

  8. 经典算法题——最长公共子序列

    ** 解析: ** 此题一共有两个要点: 1.求上述两个最长公共子序列的长度 2.求所有可能出现的最长公共子序列个数,答案可能很大,只要将答案对10^8求余即可 第一个都很好想到,难点在于第二个.下面 ...

  9. 【算法刷题日记之本手篇】汽水瓶与查找两个字符串a,b中的最长公共子串

    ⭐️前面的话⭐️ 本篇文章介绍来自牛客试题广场的两道题题解,分别为[汽水瓶]和[查找两个字符串a,b中的最长公共子串],展示语言java. 小贴士:本专栏所有题目来自牛客->面试刷题必用工具

最新文章

  1. [转载 js] YUI解决mouseout事件冒泡的办法
  2. Apache用户认证,域名跳转
  3. gdb 查看 stl容器 zz
  4. TensorFlow2-基础操作
  5. 垃圾收集器–串行,并行,CMS,G1(以及Java 8中的新增功能)
  6. 编写声卡驱动(框架)
  7. mysql中like与rlike_MySQL中RLIKE运算符的使用详解-mysql教程-
  8. windows server 2012/2016 开启桌面图标
  9. C++ 基类指针和派生类指针之间的转换
  10. 优科网络:WiFi价值正在回归
  11. word表格转为html5,怎么把网页版的表格转至Word
  12. Mac 卸载/安装 maven
  13. Dubbox 是什么?
  14. 抖音Vlog短视频达人必备2000+PR无缝转场过渡模板 全格式Premiere转场包
  15. Studio 3T 破解
  16. php设计模式-中级
  17. 过拟合欠拟合模拟 || 深度学习 || Pytorch || 动手学深度学习11 || 跟李沐学AI
  18. 东南大学计算机考研经验
  19. CM211-1增强版2+16_荣耀飞龙开机动画_当贝桌面卡刷固件
  20. C++提高编程-泛型编程及STL(上)

热门文章

  1. dp按照规模分类总结
  2. [如何做研究][如何写论文]
  3. 修改小程序swiper 点的样式_高质量的微信小程序样式模板应该长什么样?
  4. 电子报账系统源码_网上商城系统建设心得,轻松搞定选择困难
  5. 计算机应用中的CAI,????按计算机应用的分类,CAI应属于()应用。
  6. 7-3 堆中的路径 (25 分)
  7. mysql 循环体 如何测试_mysql里如何循环插入数据,进行测试
  8. mfc cimage加载显示图片_在微信小程序里实现图片预加载组件
  9. java内部类外部类_Java内部类:如何在内部类中返回外部类对象
  10. ai字体行间距怎么调整_字体基础知识(一)