题目来源:
leetcode题目,网址:2423. 删除字符使频率相同 - 力扣(LeetCode)
解题思路:
枚举所有不符合要求的情况。
解题代码:
class Solution {
public boolean equalFrequency(String word) {
int[] count=new int[26];
for(int i=0;i<word.length();i++){
count[word.charAt(i)-'a']++;
}
Map<Integer,Integer> map=new HashMap<>(); //Map<字符的出现次数,该数字的出现次数>
for(int i=0;i<26;i++){
if(count[i]!=0){
map.put(count[i],map.getOrDefault(count[i],0)+1);
if(map.size()>2){
return false;
}else if(map.size()==2){
int[] key=new int[2];
int[] value=new int[2];
int j=0;
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
key[j]=entry.getKey();
value[j]=entry.getValue();
j++;
}
if(value[0]!=1 && value[1]!=1){
return false;
}
if((key[0]==1&&value[0]==1) || (key[1]==1 && value[1]==1)){
continue;
}
int cal=value[1]<value[0]?key[1]-key[0]:key[0]-key[1];
if(value[1]==value[0]){
cal=Math.abs(cal);
}
if(cal!=1){
System.out.println(cal);
return false;
}
}
}
}
if(map.size()==1){
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
if(entry.getKey()!=1 && entry.getValue()!=1){
return false;
}
}
}
return true;
}
}
总结:
写代码的时候有好多情况漏了,根据错误案例添加限制条件修改的。其实可以暴力枚举删除某个位置字符是否符合要求。
官方题解是枚举所有情况。我也是两次计数,但没想到减去一后判断哈希表大小......