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

 

暴力解法

#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://www.mzph.cn/bicheng/2294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类与对象(二) 构造函数与析构函数

目录 1.类的6个默认成员函数 2.构造函数 2.析构函数 1.类的6个默认成员函数 我们前面讲到了一个空类&#xff0c;也就是类里面没有声明成员&#xff0c;但是空类里面真的什么都没有吗&#xff1f;不然&#xff0c;任何类在什么都不写时&#xff0c;编译器自动生成以下六个默…

Introducing Meta Llama 3: The most capable openly available LLM to date

要点 今天&#xff0c;我们推出 Meta Llama 3&#xff0c;这是我们最先进的开源大型语言模型的下一代。Llama 3型号将很快在AWS&#xff0c;Databricks&#xff0c;Google Cloud&#xff0c;Hugging Face&#xff0c;Kaggle&#xff0c;IBM WatsonX&#xff0c;Microsoft Azur…

VsCode一直连接不上 timed out

前言 前段时间用VsCode连接远程服务器&#xff0c;正常操作后总是连接不上&#xff0c;折磨了半个多小时&#xff0c;后面才知道原来是服务器设置的问题&#xff0c;故记录一下&#xff0c;防止后面的小伙伴也踩坑。 我使用的是阿里云服务器&#xff0c;如果是使用其他平台服务…

JMeter组件--配置元件--响应断言

响应断言&#xff08;Response Assertion&#xff09; 当响应中有明显的业务标志时&#xff0c;我们可以采用该断言器检测响应报文返回的特征值&#xff0c;进而判断在业务上是否确定&#xff1b;使用频率非常高&#xff0c;大部分场景均可以使用该断言器。 右键 >>>…

CCS项目持续集成

​ 因工作需要&#xff0c;用户提出希望可以做ccs项目的持续集成&#xff0c;及代码提交后能够自动编译并提交到svn。调研过jenkins之后发现重新手写更有性价比&#xff0c;所以肝了几晚终于搞出来了&#xff0c;现在分享出来。 ​ 先交代背景&#xff1a; 1. 代码分两部分&am…

数据结构8:队列

文章目录 Queue.h 实现文件Queue.c 测试文件test.c #头文件 Queue.h #pragma once#include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h>typedef int QListDataType;typedef struct QListNode {QListDataType val;struct QLi…

IPRally巧用Google Kubernetes Engine和Ray改善AI

专利检索平台提供商 IPRally 正在快速发展&#xff0c;为全球企业、知识产权律师事务所以及多个国家专利和商标局提供服务。随着公司的发展&#xff0c;其技术需求也在不断增长。它继续训练模型以提高准确性&#xff0c;每周添加 200,000 条可供客户访问的可搜索记录&#xff0…

Python语言零基础入门——案例实战

目录 一、用户登录系统 二、计算天数 一、用户登录系统 1.功能需求&#xff1a;用户输入用户名、密码后&#xff0c;根据用户是否已经注册&#xff0c;用户是否在黑名单中&#xff0c;提示用户是否登录成功。 2.登录功能 输入用户名输入密码登录验证&#xff1a;①用户是否…

Tomcat启动闪退解决办法

Tomcat启动闪退通常是由于多种原因引起的&#xff0c;以下列举了针对常见问题的解决办法&#xff1a; 1. 端口冲突 解决办法&#xff1a; 检查Tomcat默认使用的8080端口是否被其他应用程序占用。可以使用命令行工具&#xff08;如netstat -ano | find "8080"&#…

Linux之 USB驱动框架-USB总线(2)

一、linux 下&#xff0c;通过系统查看usb 总线 ls /sys/bus/usb/devices/也包含了很多信息&#xff1a; 其中usb1、usb2代表系统注册了2条usb总线&#xff0c;即有2个USB主机控制器&#xff0c;1和2用于区分不同总线&#xff0c;是USB的总线号。 每插入一个usb设备&#xff…

深度学习-数据操作

目录 张量通过shape属性访问张量的形状通过shape属性访问张量中元素的总数reshape改变张量的形状&#xff08;不改变元素数量和元素值&#xff09;使用全0、全1、其他常量或者从特定分布中随机采样的数字通过提供包含数值的Python列表为所需张量中的每个元素赋予确定值。张量的…

半导体存储器整理

半导体存储器用来存储大量的二值数据&#xff0c;它是计算机等大型数字系统中不可缺少的组成部分。按照集成度划分&#xff0c;半导体存储器属于大规模集成电路。 目前半导体存储器可以分为两大类&#xff1a; 只读存储器&#xff08;ROM&#xff0c;Read Only Memory&#xff…

关于抖音 担保支付 订单同步 报错

需要注意的问题就是 参数类型 一定要 文档字符类型保持一致 order_detail 参数 其实是 json 一个字符串 其中 order_detail 下的 item_list 参数 是一个数组 转成json 后还是一个数组 所以 litm_list 其实是一个 二维数组 PHP代码 非POI 订单 参数示例 [app_name > dou…

如何判断客户需求能不能做出来产品?

在做G端产品的过程中,为了让产品可以符合客户实际需求,我们需要经历客户需求调研的这个环节。那么,需求收集后,我们要从什么维度判断客户的需求是否真的可以产品化呢? 我们做G端产品,新产品的方向几乎100%来自于政策。所以才会有“政策带来产品,产品催生政绩”。 可就算…

用python写一个高并发请求的request,要求有请求的数据data/query,记录并发数及响应的时间

在Python中实现高并发请求,可以使用concurrent.futures模块来管理线程池或进程池,以并发执行HTTP请求。以下是一个简单的示例,使用requests库发送HTTP请求,并使用ThreadPoolExecutor来实现并发请求。此示例还包括记录请求的并发数和每个请求的响应时间。首先,确保安装了re…

Servlet(JavaEE开发)

目录 一、Tomcat服务器 二、Servlet生命周期详解 三、HttpRequest对象 四、HttpResponse对象 五、HttpSession对象 六、ServletContext对象 七、过滤器、 八、监听器 九、JSP技术介绍 一、Tomcat服务器 Tomcat官网&#xff1a;Apache Tomcat - Welcome! Tomcat的安装…

解锁ApplicationContext vs BeanFactory: 谁更具选择性?

目录 一、聚焦源码回顾 &#xff08;一&#xff09;源码分析和理解 &#xff08;二&#xff09;简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 &#xff08;一&#xff09;主要特性总结 &#xff08;二&#xff09;直接建议 三、案例简单说明 &am…

OpenTelemetry-1.介绍

目录 1.是什么 2.为什么使用 OpenTelemetry 3.数据类型 Tracing Metrics Logging Baggage 4.架构图 5.核心概念 6.相关开源项目 ​编辑 7.分布式追踪的起源 8.百花齐放的分布式追踪 Zipkin Skywalking Pinpoint Jaeger OpenCensus OpenTracing 9.Openteleme…

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址&#xff1a;https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测&#xff0c;这些研究普遍存在两大局限性&#xff1a;其一&#xff0c;它们往往默认所有新闻文本均出自人类之手&#xff0c;忽略了机器深度改写乃至生成的真实新闻日益增长的现…

【漏洞复现】Adobe ColdFusion 任意文件读取漏洞 CVE-2024-20767

漏洞描述 Adobe ColdFusion是美国奧多比(Adobe)公司的一套快速应用程序开发平台。该平台ColdFusion 2023 <= Update 6 和 ColdFusion 2021<= Update 12版本中存在一个任意文件读取漏洞。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共…