牛客题霸 [最长公共子串]C++题解/答案

题目描述

给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1

题解:

lcs模板

代码:

class Solution {
   
public:
    /** * longest common substring * @param str1 string字符串 the string * @param str2 string字符串 the string * @return string字符串 */
    string LCS(string str1, string str2) {
   
        // write code here
        if(str1.size()==0||str2.size()==0) return "-1";
        vector<int>dp(str2.size()+1);
        int tmp=0,anslen=0,end=0;
        for(int i=1;i<=str1.size();++i){
   
            int last=0;
            for(int j=1;j<=str2.size();++j){
   
                tmp=dp[j];
                if(str1[i-1]==str2[j-1])
                    dp[j]=last+1;
                else
                    dp[j]=0;
                last=tmp;
                if(anslen<dp[j]){
   
                    anslen=dp[j];
                    end=j;
                }
            }
        }
        string ans=str2.substr(end-anslen, anslen);
        return ans.size()==0?"-1":ans;
    }
};