[Nowcoder] 寻找子串

给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件。
 
要求:求最长的拼接子串
思路:从原字符串的1/2处开始截取,判断截取的字符串可否构成原字符串。然后再从1/3出截取判断,直到截取字符串长度为1,在这个过程中,如果存在符合条件的子串,那么它一定是最长子串,挑出循环输出即可。如果所有循环结束都没有找出符合条件的子串,那么输出false
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string str;
    while (cin >> str)
    {
        int n = str.size();
        bool isOk = false;
        for (int i = n/2; i >= 1; --i)
        {
            string tmp = str.substr(0, i);
            string res;
            for (int j = 0; j < n / i; ++j)
                res += tmp;
            if (res == str)
            {
                cout << tmp << endl;
                isOk = true;
                break;
            }
        }
        if (!isOk)
            cout << "false" << endl;
    }
    return 0;
}

 

posted @ 2018-08-10 16:07  immjc  阅读(350)  评论(0编辑  收藏  举报