解题思路:这道题目目的是让字串相同,且要求操作次数最少,也就是对每个子串相同位置进行修改,而想要修改次数最少,我们肯定选择出现次数最大的字符作为目标字符,代码实现如下,先分割统计每个子串同一位置的字母数量,由于子串有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 ; 
}