样例输入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;
}
下一篇:愤怒的牛