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