牛牛喜欢字符串

牛牛喜欢字符串

https://ac.nowcoder.com/acm/problem/205070

解题思路

有一个长度为 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;
}
全部评论

相关推荐

今天 14:49
门头沟学院 Java
点赞 评论 收藏
分享
07-23 11:37
延安大学 C++
绷不住了,晚上十点发拒信,是还在加班吗这样一想挂了好像也没什么不好
码农索隆:这个都是真人发嘛,会用到机器人定时发嘛
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务