解题思路:这道题目目的是让字串相同,且要求操作次数最少,也就是对每个子串相同位置进行修改,而想要修改次数最少,我们肯定选择出现次数最大的字符作为目标字符,代码实现如下,先分割统计每个子串同一位置的字母数量,由于子串有n/k个,所以ans直接相加不同的个数即可
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int n , k ; cin >> n >> k ;
string s ; cin >> s ;
vector<unordered_map<int , int>>arr(k) ;
s = " " + s ;
for(int i = 1 ; i <= n ; i++)
{
int num = s[i] - 'a' ;
arr[i % k][num]++ ;
}
int c = n / k ;
int ans = 0 ;
for(int i = 0 ; i < k ; i++)
{
int maxi = 0 ;
for(auto [num , cnt] : arr[i])
{
maxi = max(maxi , cnt) ;
}
ans = ans + c - maxi ;
}
cout << ans << endl ;
return 0 ;
}

京公网安备 11010502036488号