给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
例如,"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; }