2019校招vivo和深信服编程题(寻找最长重复子串)

2018-07-15  本文已影响63人  XDgbh

题目描述:
从键盘输入一个字符串,输出这个字符串中最长的重复子串,若有多个,则输出最前面的。
如输入"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;

}
上一篇下一篇

猜你喜欢

热点阅读