由题目我们可知,如果字符串的长度不是k的倍数,那么字符串就无法修改,因此直接输出-1即可,并且我们为了达到最少的修改次数,我们将字符串分成k段,每一段对应的字符数量最多的字符不进行修改,从而可以达到最少的修改次数,而对于统计字符的数量,我们可以用哈希表(map)来进行存储,并提取出最大的数量即可
上代码
#include<iostream> #include<cstring> #include<algorithm> #include<map> using namespace std; int main(void) { int k; cin >> k; string s; cin >> s; int len = s.size();//获取字符串总长度 if (len % k != 0) { cout << -1 << endl; return 0;//如果字符串长度不是k的整数倍,那么就无法修改,直接返回-1 } int t = len / k;//获取每个子串的长度 map <char, int> mp; int ans = 0; int maxn = -1; for (int i = 0; i < t; i++) {//从第一个子串的第i个字符开始 maxn = -1; for (int j = i; j < len; j += t) {//每次跳跃长度t,获取下一个子串对应的字符 mp[s[j]]++;//统计每个字符的数量 maxn = max(mp[s[j]], maxn);//获取最多数目 } ans += (k - maxn); mp.clear();//清空map } cout << ans << endl; return 0; }