首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C++打印最长的公共子字符串的递归方法是什么

用C++打印最长的公共子字符串的递归方法可以通过以下步骤实现:

  1. 首先,定义一个递归函数,该函数将接收两个字符串作为参数。
  2. 在递归函数中,判断两个字符串的最后一个字符是否相等。
  3. 如果最后一个字符相等,将其添加到公共子字符串中。
  4. 然后,递归调用函数,传入两个字符串去掉最后一个字符的子字符串。
  5. 如果最后一个字符不相等,分别递归调用函数,传入第一个字符串去掉最后一个字符的子字符串和第二个字符串去掉最后一个字符的子字符串。
  6. 在递归函数的返回值中,将两个递归调用的结果中较长的作为最长公共子字符串。
  7. 最后,打印最长公共子字符串。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <string>

using namespace std;

string longestCommonSubstring(string str1, string str2) {
    if (str1.empty() || str2.empty()) {
        return "";
    }
    
    if (str1.back() == str2.back()) {
        return longestCommonSubstring(str1.substr(0, str1.length() - 1), str2.substr(0, str2.length() - 1)) + str1.back();
    } else {
        string result1 = longestCommonSubstring(str1.substr(0, str1.length() - 1), str2);
        string result2 = longestCommonSubstring(str1, str2.substr(0, str2.length() - 1));
        return (result1.length() > result2.length()) ? result1 : result2;
    }
}

int main() {
    string str1 = "abcdefg";
    string str2 = "defghij";
    
    string longestSubstring = longestCommonSubstring(str1, str2);
    
    cout << "Longest common substring: " << longestSubstring << endl;
    
    return 0;
}

这段代码使用递归方法找到两个字符串的最长公共子字符串,并将其打印出来。请注意,这只是一个简单的示例,实际应用中可能需要考虑更多的边界情况和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【JavaScript 算法】最长公共序列:字符串问题经典解法

最长公共序列(Longest Common Subsequence,LCS)是字符串处理中经典问题。...给定两个字符串,找出它们最长公共序列,即在不改变字符顺序情况下,从这两个字符串中抽取最长序列。本文将详细介绍最长公共序列原理、实现及其应用。...其基本思想是构建一个二维数组 dp,其中 dp[i][j] 表示字符串 text1 前 i 个字符和字符串 text2 前 j 个字符最长公共序列长度。...二、算法实现 以下是最长公共序列JavaScript实现: /** * 动态规划实现最长公共序列 * @param {string} text1 - 第一个字符串 * @param {string...四、总结 最长公共序列是字符串处理中经典问题,通过动态规划方法,可以高效地解决这个问题。理解和掌握最长公共序列算法,可以应用于文本比较、版本控制、基因序列分析和数据比较等领域。

36510
  • 获取2个字符串最长公共

    计划是这样: 查找所有pdfpdf名字创建文件夹,并将对应pdf文件,移入文件夹中; 查找与pdf名字最接近MP3文件,并将其移入对应文件夹中。...In Wonderland 01.mp3 可以发现,他们都有相同字符串 ,所以先要处理找两个字符串最长公共问题。...程序源码 def getMaxCommonSubstr(s1, s2): # 求两个字符串最长公共串 # 思想:建立一个二维数组,保存连续位相同与否状态 len_s1 = len(s1)...,串 return maxNum, s1[p+1-maxNum : p+1] def printMatrixList(li): # 打印多维list row = len(li)...分析 对于测试字符串为: s1='abcdef' s2='bcxdef' 明显看出有2个公共串,bc和def,上述方法就是2个字符串各自长度建立了一个矩阵,矩阵数值初始都是0,一个字符一个字符进行对比

    2.6K30

    Python-求解两个字符串最长公共

    一、问题描述     给定两个字符串,求解这两个字符串最长公共序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB。...则这两个字符串最长公共序列长度为4,最长公共序列是:BCBA 二、算法求解 这是一个动态规划题目。...②重叠问题 重叠问题是什么?就是说原问题转化成问题后,问题中有相同问题。 原问题是:LCS(X,Y)。...由于像LCS这样问题,它具有重叠问题性质,因此:递归来求解就太不划算了。国为采用递归,它重复地求解了问题,而且需要注意是,所有问题加起来个数是指数级。...而对于递归,是不断地将问题解,直到分解为基准问题(fib(0)或者fib(1)) 说了这么多,还是写下最长公共序列递归式才完整。 ? C[i,j]表示:(x1,x2,...

    1.5K10

    C++ 动态规划经典案例解析之最长公共序列(LCS)_窥探递归和动态规划一致性

    最长公共序列(LCS) 2.1 问题描述 最长公共序列,指找出 2 个或多个字符串最长公共序列。 如字符串 s1=kabc和s2=taijc,其最长公共序列是ac。...函数语义:i和j作为起始位置时字符串s1,s2最长公共序列。...和s2最长公共序列。...无论由上向下,还是由下向上,其本质都是知道子问题答案后,再求解出大问题答案。动态规划算法是直接了当,递归是迂回求解。 现以求字符串最长公共序列为例,讲解动态规划求解过程。...总结 最长公共序列很有代表性,分析基于递归和动态规划实现过程,可以帮助我们理解此类问题,且解决此类问题。

    52520

    秋招算法岗面经(主要是撸代码题)

    百度: 一面:1、一个数组中只有两个数字只出现了一次,其他都是两次,找出这两个数字(异或方法)。2、二叉树中找出两个结点最近公共祖先。3、画出LSTM网络结构,写出GBDT过程。...二面:1、完全k叉树两个结点最近公共祖先。(多种方法)。...搜狐(实习): 一面:输入一个表达式字符串,输出该表达式值(递归方法)。 二面:反转字符串c++做。...二面:找出n以内所有质数,优化时间复杂度。 三面:1、两个字符串最长公共序列(动态规划)。2、求一棵二叉树宽度(宽度即为该二叉树中结点最多某层结点个数)(队列实现)。...2、给定一个方法将些许个小字符串可以唯一地合成一个大字符串,又可将这个大字符串拆解出原来些许个小字符串,除了字符串不能用其他数据结构。

    82110

    想进大厂,这是你绕不过门槛

    打印出二叉树中节点值和等于输入整数所有的路径 二叉树搜索区间 二叉树层次遍历 二叉树内两个节点最长距离 不同二叉树 判断二叉树是否是合法二叉查找树(BST) 1.3 链表 谈一谈,bucket...找出数组中和为S一对组合,找出一组就行 求一个数组中连续向量最大和 寻找一数组中前K个最大数 1.5 排序 Java写一·个冒泡排序? 排序都有哪几种方法?...什么时候时间最差 什么是快排算法;以及什么是稳定性排序,快排是稳定性吗;快排算法最差情况推导公式 2.3 动态规划 手写代码:最长公共连续序列 手写代码:求一个字符串最长回文串 手写代码:求最大子序和...给你一个字符串,找出第一个不重复字符,如“abbbabcd”,则第一个不重复就是c 最长公共前缀 有效字母异位词 3.Golang 3.1 递归&回溯 手写代码:两数相加 手写代码:括号生成 手写代码...:验证二叉搜索树 二叉树最大深度 二叉树最近公共祖先 全排列 3.2 并查集 手写代码:省份数量 手写代码:岛屿数量 手写代码:最长连续数列 3.3 字符串 手写代码:转换成小写字母 手写代码:最长公共前缀

    68150

    文心一言 VS 讯飞星火 VS chatgpt (206)-- 算法导论15.4 3题

    package main import ( "fmt" ) // LCSLength 计算两个字符串最长公共序列长度 // 使用带备忘递归方法 func LCSLength(str1,...递归函数会在每次需要计算相同问题时,检查是否已经在dp中存储了结果,以避免重复计算。 main函数中给出了一个例子,计算字符串"ABCBDAB"和"BDCAB"最长公共序列长度,并打印结果。...通过递归方式进行动态规划,从后往前匹配字符串,并记录最长公共序列长度。运行时间复杂度为O(mn)。...混元,代码正常运行: 带备忘 LCS-LENGTH 算法是一种动态规划方法,用于计算两个字符串最长公共序列长度。...lcsLengthMemo 函数是一个递归函数,用于计算两个字符串最长公共序列长度。当递归到基本情况时,它会返回 0。如果当前问题已经计算过,它会直接返回已经计算结果。

    15820

    公司数据结构+算法面试100题

    一种算法来颠倒一个链接表顺序。现在在不用递归情况下做一遍。   ★一种算法在一个循环链接表里插入一个节点,但不得穿越链接表。   ★一种算法整理一个数组。你为什么选择这种方法?   ...56.最长公共字串(算法、字符串)。 题目:如果字符串所有字符按其在字符串顺序出现在另外一个字符串二中, 则字符串一称之为字符串串。...注意,并不要求子串(字符串一)字符必须连续出现在字符串二中。 请编写一个函数,输入两个字符串,求它们最长公共串,并打印最长公共串。...例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们最长公共串, 则输出它们长度4,并打印任意一个串。...题目:输入一个字符串,输出该字符串中对称字符串最大长度。 比如输入字符串“google”,由于该字符串最长对称字符串是“goog”,因此输出4。

    3.3K90

    序列比对(24)最长公共序列

    本文介绍如何求解两个字符串最长公共序列。 最长公共序列问题 前文《序列比对(23)最长公共字符串》介绍了如何求解两个字符串最长公共字符串,本文将介绍如何求解两个字符串最长公共序列。...二者听起来很像,所以我们首先得说明一下字符串序列区别。 ?...与最长公共字符串问题类似,最长公共序列问题也是一种序列比对问题,可以动态规划解决,只是在迭代时允许插入和缺失,而不允许错配而已。如果是匹配,得分为1,否则得分为0。其迭代公式如下: ?...动态规划求解最长公共序列代码 具体代码如下: #include #include #include #define MAXSEQ 1000...,如果有多个,全部打印 // 递归法 if (aUnit[m][n]->M == 0) { fputs("No common seq found.

    54510

    动态规划详解

    先说一下什么是最长公共序列, 比如BDCAB 和 ABCBA两个字符串,他们最长公共序列是 BCBA,长度为4。这里要注意区分字串和序列,字串要求连续,而序列不要求连续。...这里我们需要定义一个数组dp[i][j], 数组中结果表示 第一个字符串从1-i位置 和 第二个字符串从 1-j位置最长公共序列(需注意这里字符串下标是从1开始)。...注意看以下这张图,这是理解LCS 问题关键,途中每个格子里值表示到这个下标对于字符串最长公共序列长度。...图中每个格子都有一个箭头,表示是格子中值是通过哪个格子计算出来dp数组只能计算出两个字符串最长公共序列长度,并不能求出这个公共序列。...当然这也是可以求出,再来看这图, 灰色格子中斜着箭头所在格子对应字符按顺序组合就是他们最长公共序列,当然这不是巧合, 我们只需要额外开一个数组来记录这个箭头就可以了。不是什么难事。 ?

    43310

    面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续数组最大和、秤砝码、最长公共串、切割钢条、最长不下降序列、最优二分搜索树、矩阵链

    动态规划应用于问题重叠情况,即不同问题具有公共问题,此时如果分治法就会出现重复计算求解。...)次数:" + count); } 一些打印输出: 输入:15,计算结果:610,计算(递归)次数:1973 输入:25,计算结果:75025,计算(递归)次数:242785 还是很恐怖。...查找两个字符串$a,b$中最长公共串,如果有多个相同长度串,返回第一个即可。...j个字符最长公共串长度 int[][] dp = new int[a.length() + 1][b.length() + 1]; int maxLength = 0; int endIndex...自顶向下法是从问题最终状态开始,逐步递归地解决问题,并将问题结果存储(记忆化)以避免重复计算。这种方法通常使用递归和一个缓存(如数组或哈希表)来存储已经计算过结果。 自底向上法:迭代。

    15510

    TypeScript 实战算法系列(十):实现动态规划

    算法思想 这个方法可以分为三个部分: 分解,将原问题划分为多个子问题。 解决,返回解决问题方式递归算法将问题解决。 组合,组合这些问题解决方式,得到原问题解。...动态规划问题解决步骤: 将原问题分解成问题,确定子问题是什么 确定状态转移方程,即确定上一个状态和下一个状态之间关系 确定边界条件 实例讲解 接下来,我们一些例子来更深层次了解下动态规划。...最长公共序列 找出两个字符串序列最长子序列就是最长公共序列,最长子序列是指:在两个字符串序列中以相同顺序出现,但不要求连续字符串序列。...例如: 字符串1 a c b a e d 字符串2 a b c a d f 上述表格中,描述了两个字符串,它们最长公共序列为: acad 与背包问题一样,此处我们也需要通过构建矩阵求出最长公共序列长度...* @param solution 最长公共序列矩阵 * @param wordX 字符串1 * @param m 矩阵x轴指向 * @param n 矩阵

    88820

    TypeScript实现动态规划

    算法思想 这个方法可以分为三个部分: 分解,将原问题划分为多个子问题。 解决,返回解决问题方式递归算法将问题解决。 组合,组合这些问题解决方式,得到原问题解。...动态规划问题解决步骤: 将原问题分解成问题,确定子问题是什么 确定状态转移方程,即确定上一个状态和下一个状态之间关系 确定边界条件 实例讲解 接下来,我们一些例子来更深层次了解下动态规划。...", designSkills.knapSack(capacity, weights, values, n)); 最长公共序列 找出两个字符串序列最长子序列就是最长公共序列,最长子序列是指:在两个字符串序列中以相同顺序出现...例如: 字符串1 a c b a e d 字符串2 a b c a d f 上述表格中,描述了两个字符串,它们最长公共序列为: acad 与背包问题一样,此处我们也需要通过构建矩阵求出最长公共序列长度...* @param solution 最长公共序列矩阵 * @param wordX 字符串1 * @param m 矩阵x轴指向 * @param n 矩阵

    71830

    LCS 算法:Javascript 最长公共序列

    但Z不是X和Y最长公共序列,而序列[B,C,B,A]和[B,D,A,B]也均为X和Y最长公共序列,长度为4,而X和Y不存在长度大于等于5公共序列。...对于序列[A,B,C]和序列[E,F,G]公共序列只有空序列[]。 3、最长公共序列:给定序列X和Y,从它们所有公共序列中选出长度最长那一个或几个。...A[i]为A第i个元素,A(i)为由A第一个元素到第i个元素所组成前缀。m(i, j)为A(i)和B(j)最长公共序列长度。...+str[i]相加,就可以得到我们要求字符串。 我们再写出一个方法,来验证我们得到字符串是否真正LCS字符串。作为一个已经工作的人,不能写代码像在校生那样,不做单元测试就放到线上让别人踩坑。...打印全部LCS 思路与上面差不多,我们注意一下,在LCS方法有一个Math.max取值,这其实是整合了三种情况,因此可以分叉出三个字符串。我们方法将返回一个es6集合对象,方便自动去掉。

    2.3K101

    动态规划,它来了

    这几个常见动态规划有:连续数组最大和,数组最大乘积,最长递增子序列(LIS),最长公共序列(LCS),最长公共串,最长公共串,不同序列。 什么是动态规划 首先很多人问,何为动态规划?...很多时候动态规划能解决问题,递归也能解决不过很多时候效率不高可能会用到记忆化搜索。 不太明白? 就拿求解斐波那契额数列来说,如果直接递归不优化,那么复杂度太多会进行很多重复计算。...给定两个字符串 text1 和 text2,返回这两个字符串最长 公共序列 长度。如果不存在 公共序列 ,返回 0 。...两个字符串匹配,我们设立二维dp[][]数组,dp[i][j]表示text1串第i个结尾,text2串第j个结尾最长公共长度。...给定两个字符串str1和str2,输出两个字符串最长公共串。

    53920

    拿下 BAT+华为校招 200 题 LeetCode 高频题库

    刷题方法的话,主要就是先过思路,之后再统一 AC,参考是「陈同学在搬砖」提供刷题方法。...5-最长回文串 647-回文串 72-编辑距离 343-剪绳子/整数拆分 91-解码方法 offer10-斐波那契数列 64-最小路径和 offer47-礼物最大价值 62-不同路径 96...) offer52/160-两个链表第一个公共节点/相交链表(双指针) 148-排序链表(排序、链表) 146-LRU 缓存机制(设计) 栈、队列 题目 225-队列实现栈(两个队列,一个队列可...) 236-二叉树最近公共祖先(递归*2、存储父节点) offer26-树结构(递归) offer55/104-二叉树深度/二叉树最大深度(递归、层序遍历) 543-二叉树直径(递归 + 求树高度...堆) 347-前 K 个高频元素(堆、哈希表) 字符串 题目 409-最长回文串(哈希表) offer05-替换空格 offer58/151-翻转单词顺序/ 翻转字符串单词 offer48/3-最长不含重复字符字符串

    2.5K30
    领券