替换字母题解

替换字母题解_第1张图片

样例输入1:

5 4
abcab

样例输出1:

1

样例输入2:

5 3
abcab

样例输出2:

2

思路分析:

看到这种题,先想到 O ( 26 × n ) O(26\times n) O(26×n)的时间复杂度,枚举把字符串都变成每一个字母所需要的最少操作次数,求出最小值。

代码:

#include
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;
}

下一篇:愤怒的牛

你可能感兴趣的:(个人学习总结,算法,贪心算法,c++)