给定字符串A和B,输出A和B中的第一个最长公共子串,比如A=“wepiabc B=“pabcni”,则输出“abc”。
#include <iostream>
using namespace std;
#define N 100
string findLongestCommonSubString(string str1, string str2) {
int dp[N][N] = { 0 };
memset(dp, 0, sizeof(int) * N * N);
int maxLen = 0;
int maxId = 0;
int len1 = str1.length();
int len2 = str2.length();
for (int i = 1; i <= len1; ++i) {
for (int j = 1; j <= len2; ++j) {
if (str1.at(i - 1) == str2.at(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
if (maxLen < dp[i][j]) {
maxLen = dp[i][j];
maxId = i;
}
}
}
}
return str1.substr(maxId - maxLen, maxLen);
}
int main() {
string str1 = "YXXXXXY";
string str2 = "YXYXXYYYYXXYYYYXYYXXYYXXYXYYYYYYXYXYYXYXYYYXXXXXX ";
string result = findLongestCommonSubString(str1, str2);
cout << "LongestCommonSubString: " << result << endl;
return 0;
}