问题描述
如果一个字符串 S 恰好可以由某个字符串重复 K 次得到,我们就称 S 是K 次重复字符串。例如 “abcabcabc” 可以看作是 “abc” 重复 3 次得到,所以“abcabcabc” 是 3 次重复字符串。同理 “aaaaaa” 既是 2 次重复字符串、又是 3 次重复字符串和 6 次重复字符串。现在给定一个字符串 S ,请你计算最少要修改其中几个字符,可以使 S 变为一个 K 次字符串?
输入格式
输入第一行包含一个整数 K。 第二行包含一个只含小写字母的字符串 S 。
输出格式
输出一个整数代表答案。如果 S 无法修改成 K 次重复字符串,输出 − 1。
样例输入
2 aabbaa
样例输出
2
评测用例规模与约定
对于所有评测用例,1 ≤ K ≤ 100000, 1 ≤ | S | ≤ 100000。其中 | S | 表示 S 的长度。
import java.util.Scanner;
public class Main {
public static void main(String [] args) {
// TODO Auto-generated method stub
String ss ;
int max_ch = 0;
Scanner sc = new Scanner(System.in);
char[] ch = new char[26];
int k = sc.nextInt();
ss = sc.next();
if(ss.length()%k!=0) {
System.out.println(-1);
return;
}
int ll = ss.length()/k;
char [][] pa =new char[k][ll];
for (int i = 0; i < k ;i++) {
for (int j = 0; j < ss.length()/k; j++) {
pa[i][j] = ss.charAt(i*ll+j);
}
}
for (int i = 0; i < ll; i++) {
for (int j = 0; j < k; j++) {
ch[pa[j][i]-'a'] ++;
}
int c = 0;
for (int j = 0; j < 26; j++) {
if(ch[j]!=0) {
c ++;
}
}
if(c==1) {
for (int j = 0; j < 26; j++) {
ch[j] = 0;
}
continue;
}
///
int max = 0;
int max_pos= 0;
int cha_num = 0;
for (int j = 0; j < 26; j++) {
if(max<ch[j]) {
max = ch[j];
max_pos = j;
}
}
// 找到最大的啦
for (int j = 0; j < 26; j++) {
if(j!=max_pos) {
cha_num += ch[j];
}
}
max_ch += cha_num;
for (int j = 0; j < 26; j++) {
ch[j] = 0;
}
}
System.out.println(max_ch);
}
}
注 : 目前通过了百分之90,最后一个 好像控制台没有把字符串全部输入