题意:有一段T和H组成的字符串,每次可以消耗一个代价交换两个字母的位置,求让T和H都连续的最小代价
思路:数据比较小,考虑n方做法,统计任意一种字母的个数,那么最终字母所跨越的区间是[i,i+cnt-1],枚举每一个起点展开的区间,求这个区间内不同字母的个数最小值
注意要将字符串再次拼接一份
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define YES {cout<<"YES"<<endl;return;};
#define NO {cout<<"NO"<<endl;return;};
using namespace std;
const int N=2e5+10,M=1,inf=0x3f3f3f3f,mod=1e9+7;
int n;
void solve()
{
cin>>n;
string s;cin>>s;
s=" "+s;
int cnt=0;
for(int i=1;i<=n;i++)
{
if(s[i]=='T') cnt++;
}
int ans=inf;
s=s+s.substr(1);
for(int i=1;i<=n;i++)
{
int sum=0;
for(int j=i;j<=i+cnt-1;j++)
{
if(s[j]=='H') sum++;
}
ans=min(ans,sum);
}
cout<<ans<<endl;
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int t;
t=1;
//cin>>t;
while(t--) solve();
return 0;
}