记一道2020年某企业提前批招聘的机试题

 

字符串是否由子串拼接而成

  • 描述:

给出一个非空的字符串,判断这个字符串是否由它的一个子串进行多次首尾拼接构成。
例如,“abcabcabc”满足条件,因为它是由“abc”首尾拼接而成,而“abcab”则不满足条件。

  • 输入:

abcabcabc

  • 输出:

true

  • 参考代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<bits/stdc++.h>
using namespace std;

int main() {
string str;
cin>>str;
int n=str.size();
int m,flag;
for(int i=n/2;i>=1;i--) {
flag=0;
if(n%i==0){
m=n/i;
for(int j=0;j<i;j++){
for(int k=1;k<m;k++) {
if(str[j]!=str[j+k*i]) {
flag=1;
break;
}
}
if(flag) {
break;
}
}
if(!flag) {
printf("true");
return 0;
}
}
}
printf("false");
return 0;
}