题解 | #公共子串计算#

公共子串计算

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;
}

华为题库题解 文章被收录于专栏

牛客华为题库的题解

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务