题目描述:
从键盘输入一个字符串,输出这个字符串中最长的重复子串,若有多个,则输出最前面的。
如输入"abcdefefvivovivoghijghijk",输出"vivo"。
#include<iostream>
#include<string>
using namespace std;
int find_doubleStr(string &str)
{
int len = str.length();
int res_len = len / 2;
while (res_len > 0)
{
int loop = len - res_len * 2;
for (int i = 0; i <= loop; i++)
{
string sub_str1 = str.substr(i, res_len);
string sub_str2 = str.substr(i+res_len, res_len);
if (sub_str1 == sub_str2)
{
return 2*(sub_str1.size()); //找到后返回重复字符串abcabc的总长度6
//若要返回重复字符串如abcabc中的abc,则要修改函数返回值为string
//return sub_str1;
//若要返回abcabc,则要完成一次拼接
//string str_ret = sub_str1.append(sub_str2);
//return str_ret;
}
}
res_len--;
}
return 0;
}
int main()
{
string str;
getline(cin, str); //从键盘输入字符串
int len = find_doubleStr(str);
cout << len << endl;
}