编程题——查找两个字符串a,b中的最长公共子串
题目描述:
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
输入描述:
输入两个字符串
输出描述:
返回重复出现的字符
示例:
输入
abcdefghijklmnop
abcsafjklmnopqrstuvw
输出
jklmnop
程序代码如下:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
/*本题采用动态规划求解
*首先来分析一下思路:
*首先创建一个二维数组保存公共子串长度,以较小串的长度+1为行数,较大串的长度+1为列数,初始值全为0
*我们从较小串的第一个字符开始在较大串中全部查找一遍,如果有该字符则更新数组对应位置的值,直到较小字符串遍历完
* 更新方式为[i][j] = [i-1][j-i]+1;在此过程中不断更新最大子串的长度max及起始位置start
*最后从较小串的start位置打印长度为max的子串即可*/
void findLCS(string s1, string s2)
{
int l1 = s1.size