题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
#include <algorithm>
#include <any>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string str1, str2;
cin >> str1 >> str2;
if(str1.length() > str2.length()) swap(str1, str2);//规定str1为较短串
vector<vector<int>> dp(str1.length()+1, vector<int>(str2.length()+1, 0));
int subStrLen = 0;//记录当前求得最长公共子串的长度
int left = 0;//记录当前求得最长公共子串在str1中的起始位置
for(int i = 1; i <= str1.length(); i++){
for(int j = 1; j <= str2.length(); j++){
if(str1[i-1] == str2[j-1]){
dp[i][j] = dp[i-1][j-1] + 1;
if(dp[i][j] > subStrLen){
subStrLen = dp[i][j];
left = i - subStrLen;
}
}
}
}
cout << str1.substr(left, subStrLen) << endl;
return 0;
}
查看21道真题和解析