summaryrefslogtreecommitdiff
path: root/content/string/duval.cpp
blob: de94ebd0c5bf3056daaf02c58af98b452539ce9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vector<pair<int, int>> duval(const string& s) {
	vector<pair<int, int>> res;
	for (int i = 0; i < ssize(s);) {
		int j = i + 1, k = i;
		for (; j < ssize(s) && s[k] <= s[j]; j++) {
			if (s[k] < s[j]) k = i;
			else k++;
		}
		for (; i <= k; i += j - k) {
			res.push_back({i, i + j - k});
	}}
	return res;
}

int minrotation(const string& s) {
	auto parts = duval(s+s);
	for (auto [l, r] : parts) {
		if (r >= ssize(s)) return l;
}}