fork download
  1. import java.util.Scanner;
  2. import java.util.Arrays;
  3.  
  4. public class Main{
  5. public static void main(String[] args) {
  6. Scanner scanner = new Scanner(System.in);
  7. int n = scanner.nextInt();
  8. String T = scanner.next();
  9. scanner.close();
  10.  
  11. int maxK = 1; // 最多划分的伪周期串数量,初始化为1
  12.  
  13. // 枚举每一种划分的可能长度
  14. for (int length = 1; length <= n; length++) {
  15. // 如果当前长度不能整除整个字符串长度,则跳过
  16. if (n % length != 0) {
  17. continue;
  18. }
  19.  
  20. boolean valid = true; // 判断当前划分是否有效
  21.  
  22. // 统计子串的字符频率
  23. int[][] freq = new int[n / length][10]; // 记录每个子串中0-9字符的频率
  24.  
  25. for (int i = 0; i < n; i++) {
  26. char c = T.charAt(i);
  27. freq[i / length][c - '0']++; // 计算每个子串的字符频率
  28. }
  29.  
  30. // 检查这些子串是否能通过交换变成相同的字符组成的伪周期串
  31. for (int i = 1; i < n / length; i++) {
  32. if (!Arrays.equals(freq[i], freq[0])) {
  33. valid = false;
  34. break;
  35. }
  36. }
  37.  
  38. // 如果当前划分有效,更新最大k值
  39. if (valid) {
  40. maxK = n / length;
  41. }
  42. }
  43.  
  44. // 输出最大的伪周期串个数
  45. System.out.println(maxK);
  46. }
  47. }
  48.  
Success #stdin #stdout 0.12s 54584KB
stdin
8
01102222
stdout
1