C++实现最长公共子串算法(附完整源码)

159 篇文章 17 订阅 ¥29.90 ¥99.00
本文介绍了使用后缀数组解决最长公共子串问题的C++算法实现。首先,通过在两个字符串之间添加特殊字符形成新字符串,然后利用后缀数组进行排序和查询,找出所有共同子串,最终确定最长公共子串。附带了完整的C++源代码,此方法具有较高的效率。
摘要由CSDN通过智能技术生成

C++实现最长公共子串算法(附完整源码)

最长公共子串是指在两个或多个字符串中出现的相同子串中最长的那一个。这是一个经典的字符串算法问题,有很多种不同的实现方法。本文将介绍一种使用后缀数组的算法实现,并提供相应的C++源代码。

算法简介

后缀数组是一种用于处理字符串问题的数据结构,可以用较快的速度处理许多字符串操作问题。后缀数组的主要思想是将一个字符串的所有后缀按照字典序排序,然后将排名和后缀两个信息保存在同一个数组中,以便进行查询等操作。

在本文中,我们将使用后缀数组来解决最长公共子串问题。具体地,我们将将两个字符串A和B连接起来,并在其之间添加一个特殊字符(如“$”)。然后,使用后缀数组来处理新的字符串,并找到在A和B中都出现过的子串集合。最后,我们可以在这些子串中找到最长的那一个,即为最长公共子串。

C++源代码实现

下面是基于后缀数组实现的最长公共子串算法的C++源代码。其中,sa为后缀数组,height为height数组,rank为排名数组。函数lcp(x, y)计算后缀x和y的最长公共前缀长度。

const int MAXN = 200010;
const int INF = 0x3f3f3f3f;

int n, m, len;
char a[MAXN], b[MAXN];
int wa[MAXN], wb[MAXN
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值