查找两个字符串的最长公共子串

 

暴力解法

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
string a, b, minn = "";
// a和b是我们输入的
// minn存储的是我们最小的那个字符串string cut(int l, int r) {string tmp = "";for (int i = l; i <= r; i++) tmp += a[i];return tmp;
}
// l代表的左端点,r代表的右端点,然后我们把这段的a截取出来 void solve() {if (a.size() > b.size()) swap(a, b);// 我们让较短的那个字符串是afor (int i = 0; i < a.size(); i++) {// 这个让a的左端点从a的每一个位置开始枚举for (int j = i; j < a.size(); j++) {// 这个是枚举a字符串截取的右端点string tmp = cut(i, j);// 获取我们截取出来的字符串if (b.find(tmp) != string::npos) if (tmp.size() > minn.size()) minn = tmp;// 如果b中有截取出来的这个字符串,那么我们就是会比较和我们之前// 保存的最长长度字符串比较,一样的不更新,因为要保证我们取到// 第一个最长的,然后大于的时候进行一个更新}}cout << minn << "\n";// 输出我们最小的那个字符串
}signed main() {while(cin >> a >> b) {minn = "";//  因为多组输入,所以我们要进行这样一个清空的操作solve();}return 0;
}

 动态规划

思路:其实这个就是一个经典的DP问题,那我们最简单的思路其实就是我们可以开一个二维数组,那么我们这个二维数组是什么呢?假设我们定义了一个二维数组𝑑𝑝[𝑖][𝑗]dp[i][j],是什么意思呢?就是代表我们a字符串的前i个字符和b的前j的字符是一样的。

然后相同的地方设置为1,不同的地方设置为0,然后我们最后就是找最长的连续的对角线的长度就是最长的公共子串了

然后我们的状态转移方程就是:

#include <iostream>
using namespace std;string substrMax(string a,string b)
{if(a.size()>b.size()){swap(a,b);}int len1=a.size();//这里其实用m,n来命名会更加方便int len2=b.size();int dp[len1+1][len2+1];//dp[i][j]表示a的前i个字符和b的前j个字符的最长公共子串长度int maxlen=0,end=0;for(int i=0;i<=len1;++i)dp[i][0]=0;for(int j=0;j<=len2;++j)dp[0][j]=0;for(int i=1;i<=len1;++i){for(int j=1;j<=len2;++j){if(a[i-1]==b[j-1])dp[i][j]=dp[i-1][j-1]+1;else dp[i][j]=0;if(dp[i][j]>maxlen){maxlen=dp[i][j];end=i-1;}}}if(maxlen==0)return "-1";else return a.substr(end-maxlen+1,maxlen);
}
int main() {string a,b;cin>>a>>b;cout<<substrMax(a,b);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2980412.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

大小端解释以及如何使用程序判断IDE的存储模式

今天让我们来了解一下大小端的概念吧 什么是大小端&#xff1f; 大端&#xff08;存储&#xff09;模式&#xff1a;指的是数据的低位保存在内存的高地址处&#xff0c;而数据的高位则保存在内存的低地址处。 小端&#xff08;存储&#xff09;模式&#xff1a;指的是数据的低位…

Discuz! X系列版本安装包

源码下载地址&#xff1a;Discuz! X系列版本安装包 很多新老站长跟我说要找Discuz! X以前的版本安装包&#xff0c;我们做Discuz! X开发已经十几年了&#xff0c;这些都是官方原版安装包&#xff0c;方便大家使用&#xff08;在官网已经找不到这些版本的安装包了&#xff09; …

新网站上线需要注意什么?

质量保证&#xff1a;确保网站的所有功能和页面都经过了充分的测试&#xff0c;并且在各种不同的浏览器和设备上都能够正常运行。检查所有链接、表单和交互式元素&#xff0c;确保它们都能够按照预期工作。优化性能&#xff1a;确保网站加载速度快&#xff0c;响应迅速。优化图…

详细UI色彩搭配方案分享

UI 配色是设计一个成功的用户界面的关键之一。UI 配色需要考虑品牌标志、用户感受、应用程序的使用场景&#xff0c;这样可以帮助你创建一个有吸引力、易于使用的应用程序。本文将分享 UI 配色的相关知识&#xff0c;帮助设计师快速构建 UI 配色方案&#xff0c;以满足企业的需…

环回光模块

&#x1f44f;&#x1f4cd;环回光模块&#xff08;Lookback&#xff09;&#xff0c;也称为光模块自环测试回路器&#xff0c;用于测试系统或网络中的信号回传。通过回传信号&#xff08;主要是成对连接发射端到接收端的一侧&#xff09;&#xff0c;可以检测网络链路中各种潜…

文件上传的复习(upload-labs1-5关)

什么是文件上传漏洞&#xff1f; 文件上传本身是一个正常的业务需求&#xff0c;对于网站来说&#xff0c;很多时候也确实需要用户将文件上传到服务器&#xff0c;比如&#xff1a;上传图片&#xff0c;资料。 文件上传漏洞不仅涉及上传漏洞这个行为&#xff0c;还涉及文件上…

安卓手机投屏到电脑:实现屏幕共享的实用指南

“吃饭的时候觉得手机看剧实在是太费眼睛了&#xff0c;终于经过一番摸索、试验&#xff0c;我探索出了新大陆&#xff01;只要将安卓手机投屏到电脑&#xff0c;就可以放大画面&#xff0c;还能同步操作&#xff0c;远离屏幕的同时还能够看清视频&#xff01;这些方法太实用啦…

JS -正则表达式

正则表达式 关于正则表达式&#xff0c;其实我写过几篇了&#xff0c;但是真正的正则表达式其实主要用于定义一些字符串的规则&#xff0c;计算机根据给出的正则表达式&#xff0c;来检查一个字符串是否符合规则。 我们来看一下&#xff0c;在JS中如何创建正则表达式对象。 语…

公链系统开发全指南: 从规划到实施

在区块链技术的迅速发展和应用推广下&#xff0c;公链系统的开发成为了当前数字资产领域的热门话题。从规划到实施&#xff0c;公链系统的开发过程需要经历多个步骤&#xff0c;下文将详细介绍每个步骤。 第一步: 规划和设计 市场调研: 分析市场需求和竞争情况&#xff0c;确定…

Power BI 如何创建页面导航器?(添加目录按钮/切换页面按钮)

Power BI 中页导航是什么&#xff1f; 在Power BI中&#xff0c;页导航&#xff08;Page Navigation&#xff09;是指在报告中创建多个页面&#xff08;页&#xff09;&#xff0c;然后允许用户在这些页面之间进行导航的功能。 如下图所示&#xff0c;页导航的选项和报告中的…

多模态模型

转换器成功作为构建语言模型的一种方法&#xff0c;促使 AI 研究人员考虑同样的方法是否对图像数据也有效。 研究结果是开发多模态模型&#xff0c;其中模型使用大量带有描述文字的图像进行训练&#xff0c;没有固定的标签。 图像编码器基于像素值从图像中提取特征&#xff0c;…

调度问题变形的贪心算法分析与实现

调度问题变形的贪心算法分析与实现 一、问题背景与算法描述二、算法正确性证明三、算法实现与分析四、结论 一、问题背景与算法描述 带截止时间和惩罚的单位时间任务调度问题是一个典型的贪心算法应用场景。该问题的目标是最小化超过截止时间导致的惩罚总和。给定一组单位时间…

基于51单片机的数码管显示的proteus仿真

文章目录 一、数码管二、单个数码管显示0~F仿真图仿真程序 三、数码管静态显示74HC138译码器74HC245缓冲器仿真图仿真程序 四、数码管动态显示仿真图仿真程序 三、总结 一、数码管 数码管&#xff0c;也称作辉光管&#xff0c;是一种可以显示数字和其他信息的电子设备。它的基…

毕业撒花 流感服务小程序的设计与实现

目录 1.1 总体页面设计 1.1.1 用户首页 1.1.2 新闻页面 1.1.3 我的页面 1.1.5 管理员登陆页面 1.1.6 管理员首页 1.2 用户模块 1.2.1 体检预约功能 1.2.2 体检报告功能 1.2.4 流感数据可视化功能 1.2.5 知识科普功能 1.2.6 疾病判断功能 1.2.7 出示个人就诊码功能 …

2(第一章,数据管理)

目录 概述 基本概念 数据与信息 数据管理原则 1. 数据是有独特属性的资产 2. 数据的价值可以用经济术语来表示 数据价值评估模型 3. 管理数据意味着对数据的质量管理 4. 管理数据需要元数据 5. 数据管理需要规划 6. 数据管理须驱动信息技术决策 7. 数据管理是跨职能…

40-50W 1.5KVDC 隔离 宽电压输入 DC/DC 电源模块——TP40(50)DC 系列

TP40(50)DC系列电源模块额定输出功率为40-50W、应用于2:1、4&#xff1a;1电压输入范围 9V-18V、18V-36V、36V-75V、9V-36V、18V-75V的输入电压环境&#xff0c;输出电压精度可达1%&#xff0c;可广泛应用于通信、铁路、自动化以及仪器仪表等行业。

AI-数学-高中-40法向量求法

原作者视频&#xff1a;【空间向量】【考点精华】3法向量求法稳固&#xff08;基础&#xff09;_哔哩哔哩_bilibili 注意&#xff1a;法向量对长度没有限制&#xff0c;求法向量时&#xff0c;可以假设法向量z为任意一个取非0的值。 示例1&#xff1a; 示例2&#xff1a;

53 语言模型【动手学深度学习v2】

https://www.bilibili.com/read/cv17622666/?jump_opus1https://www.bilibili.com/read/cv17622666/?jump_opus1

[RTOS 学习记录] 工程管理工具make及makefile

[RTOS 学习记录] 工程管理工具make及makefile 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记&#xff0c;记录目的是为了个人后续回顾复习使用。 前置内容&#xff1a; 开发工具 Borland C/C 3.1 精简版 文章目录 1 make 工具2 makefile 的内容结构3…

HBase的简单学习三

一 过滤器 1.1相关概念 1.过滤器可以根据列族、列、版本等更多的条件来对数据进行过滤&#xff0c; 基于 HBase 本身提供的三维有序&#xff08;行键&#xff0c;列&#xff0c;版本有序&#xff09;&#xff0c;这些过滤器可以高效地完成查询过滤的任务&#xff0c;带有过滤…