// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432 #include <array> #include <iostream> #include <string> using namespace std; int main() { ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); string s; cin >> s; size_t size = s.size(); string sa = s.substr(0, size / 2), sb = s.substr(size / 2, size / 2);//---------把字符串分成前部分和后部分 array<int, 26> a{0}, b{0}; for (int i = 0; i < size / 2; i++){ a[sa[i] - 'a']++; b[sb[i] - 'a']++; } int maxa = 0, maxb = 0, suma = 0, sumb = 0;//------以前半部分为例,最优策略应该是把所有字母都换成出现次数最多的那一个。所以 前半部分的操作次数 = 前半部分的字母数(size / 2) - 前半部分出现次数最多的字母。 for (int i = 0; i < 26; i++){ maxa = max(maxa, a[i]); maxb = max(maxb, b[i]); suma += a[i]; sumb += b[i]; } cout << (suma + sumb - maxa - maxb);//-------suma + sumb 应该改为size的当时没想到 } // 64 位输出请用 printf("%lld")