样例输入:
9
HTHTHTHHT
样例输出:
2
思想
对于环题来说,我们可以将长度扩展1倍,模拟环。
首先,我们先统计一下没扩展之前黑点的长度。然后再拓展为环,这个时候再去统计环中每一段区间黑点的个数。我们需要找出一间黑点个数最多的区间,这个时候我们就需要输出白点的个数。白点的个数=黑点总数-区间黑点个数最大值。
code
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
const int N = 1e5 + 10, M = 2e5 + 10;
int a[M];
int s[M];
string c;
int main() {
int n, black = 0, ans = 0;
cin >> n;
cin >> c;
for (int i = 0; i < n; i++) {
if (c[i] == 'H') {
a[i] = a[i + n] = 1;
black++;
}
}
s[0] = a[0];
for (int i = 1; i < n * 2; i++) {
s[i] = s[i - 1] + a[i];
}
for (int i = 0; i < n; i++) {
if (ans < (s[i + black] - s[i])) {
ans = s[i + black] - s[i];
}
}
printf("%d\n", black - ans);
return 0;
}