[Nowcoder] 字符串是否由字串拼接

给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件。
输入描述:
非空字符
输出描述:
如果字符串满足上述条件,则输出最长的满足条件的的子串;如果不满足条件,则输出false。
输入例子1:
abcabc
输出例子1:
abc


从给定字符串的一半大小开始判断,先判断n/2是否满足条件,如果满足直接输出,如果不满足继续判断n/3,直到判断至n/i = 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;
}

猜你喜欢

转载自www.cnblogs.com/immjc/p/9454286.html