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

Jozky86發表於2020-11-09

牛客題霸 [最長公共子串]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;
    }
};

相關文章