原题链接:
查找两个字符串a,b中的最长公共子串_牛客题霸_牛客网
描述:
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!
输入描述:输入两个字符串
输出描述:返回重复出现的字符
#include#include #include using namespace std; int main() { string str1,str2,lstr,sstr; cin>>str1>>str2; if(str1.size()>str2.size()) { swap(str1,str2); } int n=str1.size(); int m=str2.size(); vector >dp(n+1,vector (m+1,0));//创建动态数组 int max=0,maxi=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(str1[i-1]==str2[j-1]) { dp[i][j]=dp[i-1][j-1]+1; } else { dp[i][j]=0; } if(dp[i][j]>max) { max=dp[i][j]; maxi=i-1; } } } string ans=str1.substr(maxi+1-max,max); for(int i=0;i



