eg:asdfas
werasdfaswer
输出6
我是用两个指针来操作的
xs是长的字符串,ns是短的那个。
因为每次从短的开始,遍历长字符串开始的头部,大的需要遍历短字符串的元素个数次。
小的 每次从短的开始便利长字符串,相同啧开始一同向后遍历,如果长的不会遍历完全,则需要让短的在指向刚开始,长的从上次遍历的下一个位置开始遍历。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1, s2, ns, xs;
cin >> s1;
cin >> s2;
if (s1.size() < s2.size())
{
ns = s1;
xs = s2;
}
else
{
ns = s2;
xs = s1;
}
char* c = &ns[0];
char* p = &xs[0];
char* front = c;
int count = 0;
int ret = 0;
while (*front != '\0')
{
while (*p!='\0')
{
if (*c!=*p)
p++;
if (*c == *p)
{
char* cur = p;
while (*c == *p)
{
c++;
p++;
count++;
}
if (ret < count)
{
ret = count;
}
count = 0;
p = cur + 1;
c = front;
}
}
front++;
p = &xs[0];
}
cout << ret << endl;
return 0;
}