字符串最短循环字串

输入输出

一个字符串,如果是由某个最短的字符串重复组成的,输出最短的重复部分,比如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,逐个比较看是否前后一致。 

猜你喜欢

转载自blog.csdn.net/sinat_39416814/article/details/108712566