
样例输入1:
5 4
abcab
样例输出1:
1
样例输入2:
5 3
abcab
样例输出2:
2
思路分析:
看到这种题,先想到 O ( 26 × n ) O(26\times n) O(26×n)的时间复杂度,枚举把字符串都变成每一个字母所需要的最少操作次数,求出最小值。
代码:
#include<iostream>
using namespace std;
int n,m,ans=0x3f3f3f3f;//ans赋极大值
char a[200010];
int f(char x){//判断把字符串都变成字符i的最小操作数
	int num=0;
	for(int i=1;i<=n;){
		if(a[i]==x){//如果已经符合,i++
			i++;
		}else{
			num++;//否则次数+1
			i+=m;//因为每次可以替换m个,所以直接跳到i+m
		}
	}
	return num;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i='a';i<='z';i++){
		ans=min(ans,f(i));//更新最小值
	}
	cout<<ans;
	return 0;
}
下一篇:愤怒的牛


![[算法很美打卡] 多维数组篇 (打卡第二天)](https://img-blog.csdnimg.cn/f4ef0f6c85fc403ca8549288a963ea0d.png)
















