蓝桥杯-重复字符串
问题描述 如果一个字符串 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,最后一个 好像控制台没有把字符串全部输入 ...