经典DP|C++|#查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
需要满足前面的序列相同,自己相同,才能增加
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(void) {
string s1, s2;
cin >> s1 >> s2;
int start;
int m = 0;
int dp[301][301];
if (s1.size() > s2.size())
swap(s1, s2);
int n1 = s1.size();
int n2 = s2.size();
for (int i = 0; i <= n1; i++)
dp[i][0] = 0;
for (int i = 0; i <= n2; i++)
dp[0][i] = 0;
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++)
{
if (s1[i - 1] == s2[j - 1])
{
dp[i][j] = dp[i - 1][j - 1] + 1;
if (dp[i][j] > m)
{
m = dp[i][j];
start = i - m;
}
}
}
}
cout << s1.substr(start, m);
return 0;
}
查看19道真题和解析