对于这个问题,可以使用C++中的动态规划算法来找到最长公共子串。以下是一个基本的实现步骤:
以下是一个简单的C++代码实现:
#include <iostream>
#include <string>
using namespace std;
bool isCommonSubstr(string s, string t) {
int m = s.length(), n = t.length();
bool dp[m+1][n+1];
memset(dp, false, sizeof(dp));
dp[0][0] = true;
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 && j == 0) {
continue;
}
if (s[i-1] == t[j-1]) {
dp[i][j] = dp[i-1][j-1] || dp[i-1][j];
} else {
dp[i][j] = false;
}
}
}
return dp[m][n];
}
int main() {
string s = "abcde";
string t = "bcdef";
if (isCommonSubstr(s, t)) {
cout << "最长公共子串是: " << s.substr(0, t.length()) << endl;
} else {
cout << "没有找到公共子串" << endl;
}
return 0;
}
以上代码中,我们使用了一个bool类型的二维数组dp来记录字符串s和t的每个子串是否是另一个字符串的最长公共子串。在主函数中,我们输入两个字符串s和t,然后调用isCommonSubstr函数来检查它们是否是公共子串,如果是,则输出最长公共子串,否则输出提示信息。
领取专属 10元无门槛券
手把手带您无忧上云