时间:1s 空间:256M
目录
题目描述:
有长度为的字符串,仅包含小写字母。
小信想把字符串变成只包含一种字母。他每次可以选择一种字符,然后把长度最多为的子串中的字符都替换成。
小信想知道最少需要操作几次能让字符串只包含一种字母。
输入格式:
第一行包含两个整数,。
第二行包含一个长度为的字符串,只有小写字符。
输出格式:
对于每组测试数据,输出一个整数表示答案。
样例1输入:
5 4
abcab
样例1输出:
1
样例2输入:
5 3
abcab
样例2输出:
2
约定与提示:
对于100%的数据,
对于样例1:把子串 中的字符都变成 'b',或者把子串中的字符都变成 'a'。
主要思路:
这是道简单的贪新题,我们可以使用暴力的方法,首先枚举二十六个字母(题目中说只包含小写字母)代表我们要把字符串全部变成这个字符,接着枚举每一个字符,如果这个字符是我们枚举的字符,那么就continue,否则,我们就将j+=m-1(j是枚举每个字符的下标),因为下一次j会++,所以j要加上m-1,表示向后覆盖了m个,并且ans++。
总复杂度,完全不会超时。
上代码:
#include<bits/stdc++.h>
using namespace std;
string s;
string s1;
int main()
{
int n,m;
cin>>n>>m;
cin>>s;
int ans1=INT_MAX;
for(int i=0;i<26;i++)
{
int ans=0;
for(int j=0;j<n;j++)
{
if(s[j] == i+'a')
{
continue;
}
else
{
j+=m-1;
ans++;
}
}
// cout<<ans<<'\n';
ans1 = min(ans1,ans);
}
cout<<ans1;
return 0;
}