#include <iostream>
#include <string>
using namespace std;
/*
给一个字符串、例如 “ababc”要求返回“ab”. 因为“ab”连续重复出现且最长。 用C/C++语言写一函数完成该算法,给出复杂度
*/
string find(const string& str) {
string ret;
int len = str.size();
if (len <= 1) return str;
int max_start = 0, max_len = 0;
int tmp_start = 0, tmp_len = 0;
int i, j, k;
for (k = 0; k < len; ++k) {
i = k;
tmp_start = i;
j = i + 1;
if ((j = str.find_first_of(str[i], j)) == string::npos) {
continue;
}
while (j < len) {
if (str[i] == str[j]) {
++i; ++j;
}
else {
tmp_len = i - tmp_start;
if (max_len < tmp_len) {
max_start = tmp_start;
max_len = tmp_len;
}
break;
}
if (j == len - 1) {
tmp_len = i - tmp_start + 1;
if (max_len < tmp_len) {
max_start = tmp_start;
max_len = tmp_len;
}
}
}
}
return str.substr(max_start, max_len);
}
int main(int argc, const char* argv[]) {
string str = "abcdefgggcde";
string sub_str = find(str);
cout << "str: " << str << endl;
cout << "sub_str: " << sub_str << endl;
return 0;
}