最长公共子串的问题(正常方法和矩阵法,动态规划)

题目:

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

  • 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

看法:

这个题我本人看着在网上没有详细的解释,其实你要搞懂一个问题,整体是让你求最长公共子串的长度比较简单,一直双重遍历,比较 最长子串的长度,但是如果最后要你那个最长公共子串难度会有一个提升,

首先下面第一种方法我用双重遍历去找一下,找到最长公共子串,找到最长公共子串的关键是用map去储存字符串,这样以len为键一下就找到了最长公共子串

代码如下:

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
int main() {string  s1, s2;s1 = "abcdkkk";s2 = "baabcdadabc";map<int, string>hash;string cnts;int maxlen=0;int len;int i, j;//双层遍历for循环,只动一个字符串for (i = 0; i < s1.length(); i++) {string s3 = "";for (j = i; j < s1.length(); j++) {s3 += s1[j];if (s2.find(s3) != -1) {cnts = s3;len = s3.length();hash[len] = cnts;}}maxlen = max(maxlen, len);}cout << maxlen << " " << hash[maxlen];
}

注意点    如果最大公共子串不止一个,将map改为map<int,vector<string>>,改变 了一下储存方式

代码如下:

#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
int main() {string  s1, s2;s1 = "abcdkkk";s2 = "baabcdadabc";map<int, vector<string>>hash;string cnts;int maxlen=0;int len;int i, j;//双层遍历for循环,只动一个字符串for (i = 0; i < s1.length(); i++) {string s3 = "";for (j = i; j < s1.length(); j++) {s3 += s1[j];if (s2.find(s3) != -1) {cnts = s3;len = s3.length();hash[len].push_back(cnts);}}maxlen = max(maxlen, len);}cout << maxlen << " " ;for (auto s : hash[maxlen]) {cout << s;}
}

矩阵法:简单的动态规划

1.把两个字符串组成行和列的二维矩阵

2.如果相同则为值取1,不同则取0

3.、通过查找出值为1的最长对角线就能找到最长公共子串

代码如下:

int f(const char* s1, const char* s2)
{int a[N][N];int len1 = strlen(s1);int len2 = strlen(s2);int i,j;memset(a,0,sizeof(int)*N*N);int max = 0;for(i=1; i<=len1; i++){for(j=1; j<=len2; j++){if(s1[i-1]==s2[j-1]) {a[i][j] = a[i-1][j-1]==1? a[i-1][j-1]+1:1; if(a[i][j] > max) max = a[i][j];}}}return max;
}

 

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

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

相关文章

DAY31:贪心算法入门455、53、376

理论基础 贪心算法的基本思路是通过局部最优从而达到全局最优&#xff0c;但是有时候局部最优并不一定导致全局最优&#xff0c;这样就需要动态规划的方法。但一部分题目是能通过贪心得到的。贪心的证明一般用到数学归纳法和反证法。在实际的问题中&#xff0c;没有统一的代码…

Java通过模板替换实现excel的传参填写

以模板为例子 将上面$转义的内容替换即可 package com.gxuwz.zjh.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.util.HashMap; import java.util.Map; import java.io.IOException; impor…

linux系统nginx工具性能优化

nginx性能优化 nginx性能优化当前系统结构瓶颈了解业务模式性能与安全系统与nginx性能优化文件句柄系统全局性修改进程局部性修改cpu的亲和配置配置worker_processes nginx通用配置优化cpu绑定nginx 隐藏版本nginx 修改上传文件大小nginx 启用压缩传输 nginx性能优化 当前系统…

【算法题】76. 最小覆盖子串

题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数…

conda多虚拟环境的搭建与切换

在 Python 开发中&#xff0c;很多时候我们希望每个应用有一个独立的 Python 环境&#xff08;比如应用 1 需要用到 TensorFlow 1.X&#xff0c;而应用 2 使用 TensorFlow 2.0&#xff09;。这时&#xff0c;Conda 虚拟环境即可为一个应用创建一套 “隔离” 的 Python 运行环境…

copilot和chatGPT的区别分析

Copilot是一个基于人工智能的代码提示工具&#xff0c;由GitHub和人工智能公司合作开发。它可以利用机器学习技术和大量训练数据生成高质量的代码&#xff0c;提高开发者的编码效率。Copilot的工作原理是基于自然语言处理、机器学习和深度神经网络技术&#xff0c;以及大规模实…

uni-app学习与快速上手

文章目录 一、uni-app二、学习与快速上手三、案例四、常见问题五、热门文章 一、uni-app uni-app是一种基于Vue.js开发框架的跨平台应用开发框架&#xff0c;可以用于同时开发iOS、Android、H5和小程序等多个平台的应用。uni-app的设计理念是一套代码可以编译到多个平台运行&a…

CentOS 7 下安装 Docker 及配置阿里云加速服务

一、系统要求与环境准备 在 CentOS 7 系统中安装 Docker 前&#xff0c;请确保您的内核版本满足最低要求&#xff08;Docker 要求内核版本至少为 3.10 或更高&#xff09;。运行以下命令检查当前内核版本&#xff1a; uname -r若内核版本符合条件&#xff0c;接着更新系统至最…

这些SQL你练习过吗?(网友提供的SQL)

行转列SQL练习 题目 把图1转换成图2结果展示 图1 CREATE TABLE TEST_TB_GRADE (ID int(10) NOT NULL AUTO_INCREMENT,USER_NAME varchar(20) DEFAULT NULL,COURSE varchar(20) DEFAULT NULL,SCORE float DEFAULT 0,PRIMARY KEY (ID) )insert into TEST_TB_GRADE(USER_NAME, CO…

STM32单片机项目之多功能智能小车硬件设计

基于STM32单片机多功能智能小车功能说明&#xff1a; TFTLCD显示按键LVGL&#xff08;菜单、小车工作模式选择、设置&#xff09;手机蓝牙遥控模式射频手柄遥控模式5路红外寻迹模式超声波避障模式语音播报低功耗控制 硬件原理图设计 单片机最小系统&#xff1a; 由于要使用…

通信技术的OSI协议层

通信协议层是网络通信虫的重要组成部分.它定义了在网络进行数据传输时所需遵循的规则和流程。而OSI参考模型是由国际标准化组织提出的概念模型&#xff0c;可以为各种计算机互连构成网络提供标准框架。在用 OSI模型实现融媒体平台网络组建的过程中&#xff0c;相关主体需要认识…

滴滴开源小程序框架 Mpx 新特性:局部运行时能力增强

Mpx 是滴滴开源的一款增强型跨端小程序框架&#xff0c;自 2018 年立项开源以来如今已经进入第六个年头&#xff0c;在这六年间&#xff0c;Mpx 根植于业务&#xff0c;与业务共同成长&#xff0c;针对小程序业务开发中遇到的各类痛点问题提出了解决方案&#xff0c;并在滴滴内…

NVIDIA Isaac ROS - 入门教程(一)

系列文章目录 前言 欢迎访问 Isaac ROS&#xff0c;这是一套硬件加速、高性能、低延迟的 ROS 2 软件包&#xff0c;用于制造自主机器人&#xff0c;充分利用 Jetson 和其他英伟达平台的强大功能。 查看入门指南&#xff0c;开始使用 Isaac ROS。设置 Isaac ROS Buildfarm&…

如何让思维系统化,拥有「自己的想法」?

先思考一个问题&#xff1a; 如果外星人来访地球&#xff0c;你觉得他们更有可能是善意的&#xff0c;还是恶意的&#xff1f; 你的反应是什么&#xff0c;会如何切入思考&#xff1f; 一般人可能会这样回答&#xff1a; 当然是恶意的&#xff0c;因为要争夺资源啊&#xff0c;…

前端工程化之:webpack1-3(模块化兼容性)

一、模块化兼容性 由于 webpack 同时支持 CommonJs 和 ES6 module &#xff0c;因此需要理解它们互操作时 webpack 是如何处理的。 二、同模块化标准 如果导出和导入使用的是同一种模块化标准&#xff0c;打包后的效果和之前所说的模块化没有任何差异。 CommonJS&#xff…

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…

ELK+Filebeat 部署实验

Filebeat是轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat&#xff0c;并指定目录与日志格式&#xff0c;Filebeat 就能快速收集数据&#xff0c;并发送给 logstash 进行解析&#xff0c;或是直接发给 Elasticsearch 存储&#xff0c;性能上相比运行…

overflow产生的滚动条样式设置

修改overflow产生的滚动条样式&#xff0c;主要可以通过如下三个伪元素设置&#xff1a; 1)-webkit-scrollbar&#xff1a;设置水平滚动条的高度&#xff0c;垂直滚动的宽度 2)-webkit-scrollbar-thumb&#xff1a;设置滚动条里面的滑块样式 3)-webkit-scrollbar-track&…

MySQL介绍、安装和卸载

MySQL入门——网安基础 1. 数据库基本概念2. 数据库类型和常见的关系型数据库2.1 数据库类型2.2 常见的关系型数据库 3. MySQL介绍4. MySQL8的安装和卸载 1. 数据库基本概念 1. 数据 所谓数据&#xff08;Data&#xff09;是指对客观事物进行描述并可以鉴别的符号&#xff0c;…

万物简单AIoT 端云一体实战案例学习 之 空气质量检测系统

学物联网,来万物简单IoT物联网!! 下图是本案的3步导学,每个步骤中实现的功能请参考图中的说明。 1、简介 环境污染、空气污染是人类一直所关心并且讨论的永恒话题,人们对优质的环境和健康的身体非常向往。因此,如果有一种可以检测周围环境的空气质量的设备并且环境数据…