题目描述
如果一个字符串 S 恰好可以由某个字符串重复 K 次得到,我们就称 S 是 K 次重复字符串。例如 abcabcabc 可以看作是 abc 重复 3 次得到,所以 abcabcabc 是 3 次重复字符串。
同理 aaaaaa 既是 2 次重复字符串、又是 3 次重复字符串和 6 次重复字符串。
现在给定一个字符串 S,请你计算最少要修改其中几个字符,可以使 S 变为一个 K 次字符串?
输入描述
输出描述
输出一个整数代表答案。如果 S 无法修改成 K 次重复字符串,输出 −1。
输入输出样例
示例 1
输入
2
aabbaa
输出
2
运行限制
最大运行时间:1s
最大运行内存: 128M
源码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 重复字符串 {
public static void main(String[] args) throws Exception, IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int k=Integer.parseInt(br.readLine());
String s=br.readLine();
if (s.length() % k !=0) {
System.out.println(-1);
return;
}
int n=s.length()/k;//每组有几个数
int[] cnt=new int[26];
int ans=0;
for (int i = 0; i < n; i++) {
for(int j=0;j<cnt.length;j++) cnt[j]=0;
int max=0;//统计出现最多次的字母
for (int j = 0; j < k; j++) {
int x=s.charAt(i+j*n);
cnt[x-'a']++;
max=Math.max(max, cnt[x-'a']);
}
//如果为两次重复串,那么就使用2-max 确认需要修改的次数
ans+=k-max;
}
System.out.println(ans);
}
}