替换字母2 题解

题目id:6093

题目描述:

有长度为\(n\)的字符串,仅包含小写字母。
小信想把字符串变成只包含一种字母。他每次可以选择一种字符\(c\),然后把长度最多为\(m\)的子串中的字符都替换成\(c\)。小信想知道最少需要操作几次能让字符串只包含一种字母。

解题思路

该题看起来很难,但是小写字母只有26个,替换的操作也并不复杂:从字母串第一位开始,如果遇到不是目标的字母就累计\(m\)个变成目标字母,所以该题可用枚举解决。
定义变量\(ans\)为最终操作次数,\(cnt\)为枚举时的操作次数。
枚举\(26\)个字母分别为操作后字母串的情况,对原字母串每个长度为\(m\)的区间\(\left[l,r \right]\)进行判断,如果不是由当前所枚举字母构成的字母串,就将其修改为所枚举字母,并将当前操作次数\(cnt+1\)枚举完一个字母后用\(cnt\)对最终答案\(ans\)取最小值,最后输出\(ans\)即可。

AC Code

#include<bits/stdc++.h>
using namespace std;
int n,m,ans=1e9;
string s;
int main()
{
    ios::sync_with_stdio(0);
    cin>>n>>m>>s;
    for(int i('a');i<='z';++i)
    {
        int j=0,cnt=0;
        while(j<n)s[j]!=i?(++cnt,j+=m):++j;
        ans=min(ans,cnt);
    }
    printf("%d",ans);
    return 0;
}
posted @ 2024-07-18 13:04  Firra3500  阅读(12)  评论(0编辑  收藏  举报