思路
这题看似暴力求解会超时,实际上只要我们遍历长度的因子,就可以把数量级缩小到不会超时的程度。
因子个数为$O(logn)$个
Java语法
快速复制数组,比较数组
| 12
 
 | Arrays.copyOf(a, n);Arrays.equals(a, b);
 
 | 
力扣字符串命名技巧
可以把参数的s改为大写的S,然后再把字符串数组的设为s,这样使用代码补全时更方便。
代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | class Solution {public int minAnagramLength(String s) {
 int set[] = new int[26];
 char cs[] = s.toCharArray();
 int n = s.length();
 for (int i = 0; i < n; i++) {
 set[cs[i] - 'a']++;
 if (n % (i + 1) != 0) continue;
 boolean success = true;
 for (int j = i + 1; j < n; j += (i + 1)) {
 int[] temp = Arrays.copyOf(set, 26);
 for (int k = j; k < j + i + 1; k++) {
 int pos = cs[k] - 'a';
 temp[pos]--;
 if (temp[pos] < 0) {
 success = false;
 break;
 }
 }
 if (success == false) break;
 }
 if (success) return i + 1;
 }
 return n;
 }
 
 
 }
 
 |