时间限制:1秒
空间限制:32768K
给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。
输入描述:
输入为两行字符串(可能包含空格),长度均小于等于50.
输出描述:
输出为一个整数,表示最长公共连续子串的长度。
输入例子1:
abcde abgde
输出例子1:
2
经典的动态规划问题,时间复杂度O(N^2)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str1, str2;
getline(cin,str1);
getline(cin,str2);
int dp[100][100]; // dp[i][j] 表示以i结尾的和以j结尾的最长公共子串
dp[0][0] = 0;
int res = 0;
for(int i=1;i<=str1.size();i++){
for(int j=1;j<=str2.size();j++){
if(str1[i-1]==str2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}
else{
dp[i][j]=0;
}
res = max(res,dp[i][j]);
}
}
cout<<res<<endl;
}