题解 | #公共子串计算#
公共子串计算
https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
#include <bits/stdc++.h> using namespace std; void process(string s1, string s2, int& res){ //dp[i][j]表示s1的前i个和s2的前j个字符的最大公共字串长度 vector<vector<int>> dp(s1.size() + 1, vector<int>(s2.size() + 1, 0)); int maxLength = INT_MIN; for(int i = 1; i <= s1.size(); i++){ for(int j = 1; j <= s2.size(); j++){ if(s1[i - 1] == s2[j - 1]){ dp[i][j] = dp[i - 1][j - 1] + 1; } else{ dp[i][j] = 0 ; //该位置为0 } if(dp[i][j] > maxLength){ maxLength = dp[i][j]; //更新最大长度 } } } res = maxLength; } int main(){ string s1 = "", s2 = ""; while(cin >> s1 >> s2){ int res = 0; process(s1, s2, res); cout << res << endl; } return 0; }
华为题库题解 文章被收录于专栏
牛客华为题库的题解