题目中提到,只有小写字母,可以考虑开辟长度为26的整型数组,记录每一个字母出现的次数,如果数组元素是0,那么就说明字符串中没有出现该字母
遍历该数组,尝试将某一位置上的非零元素值减一,在将减一后的,所有非零元素放入set集合去重,如果set集合的大小为1,那么就说明是满足条件的返回true。
注意,在对某一数组元素减一后,如果set集合的大小不为1,记得要把那个位置上的数再加一,变回原来的状态
当遍历了所有元素后,都没有发现符合条件的情况,则返回false
import java.util.HashSet;
class Solution {
public boolean equalFrequency(String word) {
int[] nums = new int[26];
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
nums[c - 'a']++;
}
for (int i = 0; i < 26; i++) {
if (nums[i] == 0) {
continue;
}
nums[i]--;
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
if (num != 0) {
set.add(num);
}
}
if (set.size() == 1) {
return true;
}
nums[i]++;
}
return false;
}
}