解题思路
有一个长度为 n 的字符串(仅包含小写字母),把这个字符串每隔 k 个就分出来一个子串,比如 [1,k] 为第一个子串,[k+1,2k] 为第二个、[2k+1,3k] 为第三个.....(保证n%k=0)
求:把这些子串都变成一样的最少操作次数。
对所有子串的第 1 个字符,求出哪个字符最多,然后把其他不同的字符转换为该字符。这要使这些子串的第 1 个字符相等,这样操作次数最少。
同理,对所有子串的第 2 个至第 k 个字符,使用同样的操作。然后把这些操作次数相加起来就是最终答案。
C++代码
#include<iostream>
using namespace std;
int main(){
int n, k;
cin >> n >> k;
string s;
cin >> s;
int cnt = 0;
int m = n / k;
for(int i=0; i<k; ++i){
int a[26] = {0};
for(int j=i; j<n; j+=k){
int index = s[j] - 'a';
a[index] += 1;
}
int ma = a[0];
for(int j=1; j<26; ++j){
if(a[j] > ma)
ma = a[j];
}
cnt += (m - ma);
}
cout << cnt << endl;
return 0;
}
京公网安备 11010502036488号