牛客题霸 [最长公共子串]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 hereif(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;elsedp[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;}
};