#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1;
string str2;
while (cin >> str1 >> str2)
{
if (str1.size() < str2.size())
swap(str1, str2);
int length1 = str1.size();
int length2 = str2.size();
if (length1 == 0 || length2 == 0)
{
cout << 0 << endl;
return 0;
}
int maxsize = 0;
int k = 0;
for (int i = 0; i < length1; ++i)
{
for (int j = 0; j < length2;++j)
{
int flag = 0;
k = i;
int count = 0;
while (k < length1 && j < length2 &&str1[k] == str2[j] || str1[k] == str2[j] - 32 || str1[k] == str2[j] + 32)
{
++k;
++j;
flag = 1;
++count;
}
k = i;
if (count > maxsize)
{
maxsize = count;
}
if (flag == 1)
--j;
}
}
cout << maxsize << endl;
maxsize = 0;
}
return 0;
}
不得不说这段代码写了好久,空间复杂度为1,但是细节性太多,牛客测试用例看不到,我太难了。
对代码解析:
让str1中始终存放的是最长的字符串
特殊例子判断但是貌似牛客并没有这个用例
紧接着是一个双层循环,让长字符串做外面的循环条件,短字符串做里面的循环条件