题意是将一段字符串分成k段;则
a1 a2 a3 a4 ... ak
ak+1 ak+2 ak+3 ak+4 ... a2k
...
所满足的a1=ak+1=a2k+1... ,对于每一列,只需找出字母出现次数最多的,即这一列都选择这个字母;
用个map存一下;
#include<bits/stdc++.h> using namespace std; char ch[1000010]; int main() { int n,k,ans=0; cin>>n>>k; for(int i=1;i<=n;i++) cin>>ch[i]; unordered_map<char,int> mp; for(int i=1;i<=k;i++) { mp[ch[i]]++; for(int j=1;j<n/k;j++) { mp[ch[i+j*k]]++; } int h=0; for(char p='a';p<='z';p++) h=max(h,mp[p]),mp[p]=0; ans+=n/k-h; } cout<<ans<<endl; return 0; }