思路
这题看似暴力求解会超时,实际上只要我们遍历长度的因子,就可以把数量级缩小到不会超时的程度。
因子个数为$O(logn)$个
Java语法
快速复制数组,比较数组
1 2
| Arrays.copyOf(a, n); Arrays.equals(a, b);
|
力扣字符串命名技巧
可以把参数的s
改为大写的S
,然后再把字符串数组的设为s,这样使用代码补全时更方便。
代码
1 2 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; }
}
|