// 第二题 class Solution { public: /** * * @param k int整型 表示最多的操作次数 * @param s string字符串 表示一个仅包含小写字母的字符串 * @return int整型 */ int string2(int k, string s) { int a[30] = {0}, f[30] = {0}; int len = s.size(); // 字符串长度 int ans = 0; for(int i = 0; i < len; ++i) ++a[s[i]-'a']; // 每一个字母的数量 for(int j = 0; j < 26; ++j) { // 暴力将a~z全部算一遍 memset(f, 0,sizeof(f)); for(int i = 0; i < 26; ++i) f[abs(i-j)] += a[i]; // 用abs(i-j)次修改到当前字母的数量 int res = 0, kk = k; for(int i = 0; i < 26; ++i) { kk -= f[i]*i; if(kk >= 0) res += f[i]; else {res += (kk+f[i]*i)/i; break;} // k 不够 跳出 } ans = max(ans, res); } return ans; // write code here } };
1 1
牛客网
牛客企业服务