《华为机试》——查找两个字符串a,b中的最长公共子串

news/2024/5/18 21:08:47/文章来源:https://blog.csdn.net/m0_56069910/article/details/130069198

本期给大家带来的是 华为机试题库  关于 查找两个字符串a,b中的最长公共子串 的讲解。首先,我们还是先从题目入手进行分析思考!!!


题目如下 :👇

查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。

💨注:

  • 子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!

 示例1

输入:abcdefghijklmnopabcsafjklmnopqrstuvw输出:jklmnop

本文目录

💥  题意分析

🔥  过程图解

💨 解题思路:

⌨️  代码展示




先给大家区分一下 “子串” 和 “子序列”  这二者的差别:

 

公共子串:

  • 即两个字符串中相等且连续的子串序列。
  • 例如:串 “abcdef” 和串 “abfcdef” 中公共子串有 【ab 】和 【cdef 】两个。

最长公共子串:

  • 即在上述“公共子串”的定义中加上最长二字, 上面例子中【cdef】便是最长公共子串

思想:

  • 这个题既然提到的寻找最长公共子串,这就涉及到了 寻求最优解的问题,寻求最优解常常就会用到 动态规划算法的思想!!!!

🔥  过程图解

  • 第一步:

 

  •  第二步:

 

 

  •  第三步:

  •  一直这样的去计算,直到最后:

 

 

 


💨 解题思路:

1、【substr 】函数将两个字符串 str1 和 str2  作为输入,并返回它们之间最长的公共子字符串。

2、 它初始化大小为 (len1+1) x (len2+1) 的 二维数组 ,开始时并初始化全部元素为 0 ,其中 len1 和 len2 分别是 str1  和 str2  的长度。MSC[i][j] 的值表示以 str1  [i-1] 和 str2 [j-1] 结尾的最长公共子字符串的长度。

3、 然后,该函数循环访问 二维数组并使用以下规则填充它:

  • 如果 str1[i-1] 和 str2[j-1] 相等,则 MSC[i][j] 设置为 MSC[i-1][j-1] + 1;
  • 如果 str1[i-1] 和 str2[j-1] 不相等,则 MSC[i][j] 还是保持为 0。

4、 在填充 MSC 数组时,该函数还会跟踪到目前为止看到的公共子字符串的最大长度以及它结束的索引。最后,它通过将 str1 从【str1.substr(start, max_size)】 来返回最长的公共子字符串。


⌨️  代码展示

#include <iostream>
#include<string>
#include<vector>
using namespace std;string Findmax(string& str1, string& str2) {//找最短的字符串if (str1.size() > str2.size())swap(str1, str2);//int len1 = str1.size();int len2 = str2.size();int start = 0;int max_size = 0;//初始化 行为 len1+1,列为len2+1 的数组元素全为0vector<vector<int>>MSC(len1 + 1, vector<int>(len2 + 1, 0));for (int i = 1; i <= len1; ++i) {for (int j = 1; j <= len2; ++j) {if (str2[j - 1] == str1[i - 1])MSC[i][j] = MSC[i - 1][j - 1] + 1;if (MSC[i][j] > max_size){max_size= MSC[i][j];start = i - max_size;}}}return str1.substr(start, max_size);
}
int main() {string str1;string str2;while (cin >> str1 >> str2) {string substr = Findmax(str1, str2);cout << substr << endl;}return 0;
}

到此,便是关于本题的详细讲解了!!

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

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

相关文章

正则化的基本认识

正则化(一) 拟合与欠拟合(二) 正则化的目的(三) 惩罚项&#xff08;3.1&#xff09;常用的惩罚项&#xff1a;&#xff08;3.2&#xff09;L-P范数&#xff1a;&#xff08;3.3&#xff09;L1与L2的选择&#xff1a;(一) 拟合与欠拟合 欠拟合&#xff1a; 是指测试级与训练集都…

IDEA集成Git、GitHub、Gitee

一、IDEA 集成 Git 1.1、配置 Git 忽略文件 为什么要忽略他们&#xff1f; 与项目的实际功能无关&#xff0c;不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。 怎么忽略&#xff1f; 创建忽略规则文件 xxxx.ignore&#xff08;前缀名随便起&#xff0c…

〖Python网络爬虫实战⑫〗- XPATH语法介绍

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付费…

java 通过 spring 官网创建springboot项目

文章java简单一写一个springboot入门案例带大家用idea工具工具创建了一个springboot简单的小案例 但有时 我们idea如果连不上网 就会有点问题 我们可以采用另一种创建方式 但这里的前提肯定就是 你的计算机是要有网的 然后访问 https://spring.io/ 打开spring的官网 在 Project…

SpringBoot基础使用

SpringBoot基础使用1.SpringBoot简介2.SpringBoot项目创建3.RESTful Web 服务4.SpringBoot 实现WebMvcConfigurer拦截器4.1 WebMvcConfigurer介绍4.2 WebMvcConfigurer接口常用方法4.3 WebMvcConfigurer拦截器5.SpringBoot常用注解总结6.SpringBoot异常处理6.1 使用 Controller…

Zeppelin框架及Hive查询操作

1&#xff09;、介绍 Apache Zeppelin是一款基于Web交互式框架&#xff0c;支持多种语言&#xff0c;Scala、SparkSQL、Markdown&#xff0c;SQL、Shell、Python等。 Zeppelin提供数据分析、数据可视化。 可以使用Zeppelin链接SparkSQL Zeppelin安装和使用 1&#xff09;、…

JVM性能调优简介

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范&#xff0c;JVM将内存划分为&#xff1a; New&#xff08;年轻代&#xff09; Tenured&#xff08;年老代&#xff09; 永久代&#xff08;Perm&#xff09; 其中New和Tenured属于堆内存&#xff0c;堆内存会从JVM启动参…

Hive查询语句

目录 1.1 基础语法 1.2 基本查询&#xff08;Select…From&#xff09; 1.2.1 数据准备 1.2.2 全表和特定列查询 1.2.3 列别名 1.2.4 Limit语句 1.2.5 Where语句 1.2.6 关系运算函数 1.2.7 逻辑运算函数 1.3 分组 1.3.1 Group By语句 1.3.2 Having语句 1.4 Join语句…

【云原生】Dockerfile制作WordPress镜像,实现compose编排部署

文章目录&#x1f479; 关于作者前言环境准备目录结构dockerfile制作镜像yum 脚本Dockerfile-mariadb 镜像Dockerfile-service 镜像docker compose 编排提升✊ 最后&#x1f479; 关于作者 大家好&#xff0c;我是秋意临。 &#x1f608; CSDN作者主页 &#x1f60e; 博客主页…

BGP联邦实验

实验目的&#xff1a; 实验拓扑&#xff1a; IP地址规划&#xff1a; AS2内部&#xff1a; 172.16.0.0/16 172.16.0.0/24---P2P网络 172.16.1.0/24----MA网络 172.16.1.0/29 172.16.1.8/29 172.16.1.16/29 172.16.1.24/29 172.16.1.32/29 172.16.1.40/29 172.16.2.0/24--…

NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037

首先我们先看一下kafka消费者流程,可以看到,我们需要创建一个consumeKafka_0_10 因为我们用的kafka的版本是0_10的对吧,要用对应版本的,消费者,然后,再用一个logattribute处理器,消费的 数据我们放到这个处理器里面进行查看 然后再就是需要配置consumekafka_0_10的,这个消费者…

数据结构入门(C语言版)栈和队列之队列的介绍及实现

队列队列的概念队列的实现过程队列的结构体与接口函数的定义队列的接口实现①初始化队列(QueueInit)②队尾入队列(QueuePush)③队头出队列(QueuePop)④队头元素(QueueFront)⑤队尾元素(QueueBack)⑥有效元素个数(QueueSize)⑦检测队列是否为空(QueueEmpty)⑧销毁队列(QueueDest…

《Java8实战》第4章 引入流

集合是 Java 中使用最多的 API。 4.1 流是什么 流是 Java API 的新成员&#xff0c;它允许你以声明性方式处理数据集合&#xff08;通过查询语句来表达&#xff0c;而不是临时编写一个实现&#xff09;。可以看作是遍历数据集的高级迭代器&#xff0c;而且还可以并行的处理。…

Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例

场景 Java中创建线程的方式有三种 1、通过继承Thread类来创建线程 定义一个线程类使其继承Thread类&#xff0c;并重写其中的run方法&#xff0c;run方法内部就是线程要完成的任务&#xff0c; 因此run方法也被称为执行体&#xff0c;使用start方法来启动线程。 2、通过实…

Object方法

系列文章目录 前端系列文章——传送门 JavaScript系列文章——传送门 文章目录系列文章目录对象方法一、Object原型方法1、hasOwnProperty2、isPrototypeOf3、propertyIsEnumerable4、toString5、其他二、Object方法1、assign2、create3、defineProperties4、defineProperty5、…

基于C#编程建立Vector数据类型及对应处理方法

以C#为例&#xff0c;讲解如何建立一个类&#xff0c;这其中需要考虑需要什么样的数据&#xff08;成员&#xff09;&#xff0c;什么样的属性以及方法&#xff0c;以及提供给外部程序调用&#xff0c;最后考虑怎么样去实现这样的算法。例如对于一个向量Vector&#xff08;类&a…

【深度学习】rnn是什么?循环神经网络是什么?RNN前向传播。

文章目录循环神经网络1.循环神经网络原理2.使用Numpy实现RNN层的前向传播3.RNN存在的问题4.小结循环神经网络 通常卷积神经网络 适合处理图像问题&#xff0c;然而通常适合处理自然语言的网络是循环神经网络。rnn是所有基本网络&#xff0c;就像cnn 是很多复杂网络的基本原型。…

leedcode刷题(3)

各位朋友们大家好&#xff0c;今天是我leedcode刷题系列的第三篇&#xff0c;废话不多说&#xff0c;直接进入主题。 文章目录分割链表题目要求用例输入提示做题思路c语言代码实现Java代码实现相交链表题目要求用例输入提示做题思路c语言实现代码Java代码实现分割链表 leedcod…

《 LeetCode 热题 HOT 100》——无重复字符的最长子串

本期给大家带来的是 LeetCode 热题 HOT 100 第三题关于 无重复字符的最长子串 的讲解。首先&#xff0c;我们还是先从题目入手进行分析思考&#xff01;&#xff01;&#xff01; 题目如下 &#xff1a;&#x1f447; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符…

改进蚁狮优化算法

目录 ​1 主要内容 2 部分程序 3 程序结果 4 程序链接 ​1 主要内容 该程序方法复现《改进蚁狮算法的无线传感器网络覆盖优化》两种改进算法模型&#xff0c;即原始ALO算法的基础上添加了两种改进策略&#xff1a; - 改进1&#xff1a;将原先的间断性边界收缩因子变为连…