C/C++实现:寻找两个字符串的最长公共子串

4星 · 超过85%的资源 需积分: 9 9 下载量 56 浏览量 更新于2024-11-17 收藏 2KB TXT 举报
"该代码是用C++编写的,用于找到两个输入字符串的最长公共子串。算法通过遍历两个字符串并比较字符来实现。当找到匹配的字符时,会继续比较直到没有匹配的字符为止,然后记录下当前的公共子串。最后,程序会输出所有找到的公共子串及其长度,并找出最长的那个。" 在这个问题中,我们关注的主要知识点是"最长公共字串"。最长公共字串是指在两个或多个字符串中,存在的一个最长的、相同的子序列。这里给出的C++代码提供了一个简单的解决方案。 首先,代码定义了三个字符串数组`s1`, `s2`, 和 `s3`,以及两个二维字符数组`s`和`len_1`。`s1`和`s2`用于存储用户输入的两个字符串,`s3`和`s`分别用于临时存储和输出公共子串。`len_1`数组用来存储每个公共子串的结束位置,以便后续找出最长的一个。 在主函数`main`中,程序首先接收用户输入的两个字符串,然后通过两个`while`循环遍历这两个字符串。在内层循环中,如果找到了相同字符,程序会更新`k22`为当前位置,并在一个新的`while`循环中继续比较,直到遇到不匹配的字符或者其中一个字符串结束。此时,将找到的公共子串存入`s`数组中,并更新计数器`k3`表示找到的公共子串个数。 接下来,通过两层嵌套的`for`循环遍历`s`数组,输出所有找到的公共子串,并使用`len_1`记录每个子串的结束位置。`len_i`用于跟踪`len_1`中的有效元素数量。最后,`len_1`数组被用于找出最长的公共子串,通过比较`len_1`中的值找到最大值,但这个部分在提供的代码中并未完全实现。 这段代码使用了朴素的动态规划思想,逐字符比较来寻找最长公共子串,但效率并不高,因为对于较长的字符串,这种方法的时间复杂度会达到O(n^2),其中n是字符串的平均长度。在实际应用中,可以考虑使用更高效的算法,如KMP算法或Z算法,它们能在O(n)的时间复杂度内解决这个问题。