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

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

作者: XDgbh | 来源:发表于2018-07-15 18:51 被阅读63次

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/puappftx.html