题解 | 公共子串计算
公共子串计算
https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
#include <iostream> #include <vector> using namespace std; int main() { string s, t; cin >> s >> t; int m = s.size(), n = t.size(); // 定义 dp 数组,初始化为 0 vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0)); int maxLen = 0; // 记录最长公共子串的长度 // 填充 dp 数组 for (int i = 1; i <= m; ++i) { for (int j = 1; j <= n; ++j) { if (s[i - 1] == t[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; // 状态转移 maxLen = max(maxLen, dp[i][j]); // 更新最大值 } else { dp[i][j] = 0; // 不相等时,长度为 0 } } } // 输出结果 cout << maxLen << endl; return 0; }