牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述:
输入为两行字符串(可能包含空格),长度均小于等于50.输出描述:
输出为一个整数,表示最长公共连续子串的长度。输入例子:
abcde
abgde输出例子:
2
动态规划:
使用
dp[i][j]
表示以str1[i]和str[j]结尾的最长公共子序列长度
dp[i][j]=⎧⎩⎨dp[i−1][j−1]+10str1[i]==str2[j]else
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//#define debug_
int func(string s_1,string s_2)
{
int dp[51][51];
int result(0);
for (auto i = 0; i < s_1.size();++i)
{
for (auto j = 0; j < s_2.size();++j)
{
if (s_1[i]==s_2[j])
{
if (i>0&&j>0)
{
dp[i][j] = 1 + dp[i - 1][j - 1];
}
else
{
dp[i][j] = 1;
}
result = max(dp[i][j], result);
}
else
{
dp[i][j] = 0;
}
}
}
return result;
}
int main()
{
string s_1;
string s_2;
#ifdef debug_
s_1 = "abcde f";
s_2 = "abgde f";
#else
getline(cin, s_1);
getline(cin, s_2);
#endif
cout << func(s_1,s_2);
return 0;
}