来自于CareerCup,原题:
Given a string, find the longest substring that occurs more than once. Overlapping is allowed.
这道题感觉利用类似于KMP算法比较好,可惜KMP算法不是很熟,更别提根据这道题修改了,先把做法写在这里,等温故了KMP再回来改进:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str;
cin>>str;
string maxsubstr="";
for(int i=0;i<str.size()-1;i++)
{
for(int j=i+1;j<str.size();j++) //Can be improved by using kmp
{
int len=0;
while((j+len<str.size())&&(str[i+len]==str[j+len]))
{
len++;
}
if((len>0)&&len>maxsubstr.size())
{
maxsubstr=str.substr(i,len);
}
}
}
cout<<maxsubstr<<endl;
return 0;
}