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

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

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容