请你修改以上代码使其能打印出最长子串
时间: 2024-11-12 13:44:12 浏览: 5
js代码-给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
好的,这里我已经为你修改了代码,使其不仅能计算最长公共子串(Longest Common Substring,简称LCS),还能直接打印出来。以下是修改后的代码:
```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 求解最长公共子串并打印
void printLongestCommonSubstring(const string &X, const string &Y) {
int m = X.size();
int n = Y.size();
// 初始化一个二维数组记录最长公共子串结束位置
vector<vector<int>> lps(m + 1, vector<int>(n + 1, 0));
int maxLength = 0; // 最长子串长度
int endPos = 0; // 当前最长子串的结束位置
// 填充 LPS 数组
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (X[i - 1] == Y[j - 1]) {
lps[i][j] = lps[i - 1][j - 1] + 1;
if (lps[i][j] > maxLength) {
maxLength = lps[i][j];
endPos = i - 1;
}
} else {
lps[i][j] = 0;
}
}
}
// 根据最长公共子串结束位置构建最长公共子串并打印
if (maxLength > 0) {
cout << "The Longest Common Substring is: " << X.substr(endPos - maxLength + 1, maxLength) << endl;
} else {
cout << "No common substring found." << endl;
}
}
int main() {
string X, Y;
cout << "Enter first string: ";
cin >> X;
cout << "Enter second string: ";
cin >> Y;
printLongestCommonSubstring(X, Y);
return 0;
}
```
这个版本的`printLongestCommonSubstring`函数会在计算完最长公共子串后直接输出结果。如果找不到共同子串,则会提示"无公共子串"。
阅读全文