例如“yyabcdabjcabceg",其结果应为”abc“。解决思路是依次求出个数为len-2到1的子串,然后看看该子串是否出现多次,如果出现多次,则直接返回(因为字串的元素个数是递减的,所以该子串必然是重复出现且最长的)。
#include<iostream>
#include<string>
using namespace std;
pair<int, string> longestsubstr(const string & str);
int main()
{
string s = "yyabcdabjcabceg";
pair<int,string> p;
p = longestsubstr(s);
cout << p.first << " " << p.second << endl;
return 0;
}
pair<int, string> longestsubstr(const string & str)
{
int len = str.size();
int i;
string substr;
for(i = len - 2; i > 0; i--)
{
for(int j = 0; j+i < len; j++)
{
string temp = str.substr(j,i);
int t = str.find(temp);
int k = str.rfind(temp);
if(t != k)
return make_pair(t,temp);
}
}
return make_pair(0,"");
}