输入输出
一个字符串,如果是由某个最短的字符串重复组成的,输出最短的重复部分,比如abababab,输出ab,否则输出原字符串。
#include<iostream>
using namespace std;
void ifRepeat(string s) {
int n = s.size();
for (int i = 1; i <= n / 2; i++) {
bool match = true;
if (n % i == 0) {
for (int j = i; j < n; j++) {
if (s[j] != s[j - i]) {
match = false;
break;
}
}
if (match) {
//cout << "It's a repeat string, the repeat part is:" << endl;
for (int k = 0; k < i; k++) {
cout << s[k];
}
return;
}
}
}
//cout << "It's not a repeat string";
cout << s;
return;
}
int main() {
string s;
cin >> s;
ifRepeat(s);
return 0;
}
时间复杂度是O(n^2)
思路
假如有重复字串,且字串的长度是n,那么间距为n的字符必定是相同的,根据这个思路,就能比较s[i]和s[i-n],遍历n,再遍历i,逐个比较看是否前后一致。