题解 | #公共子串计算#
公共子串计算
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;
}
华为题库题解 文章被收录于专栏
牛客华为题库的题解
