문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
인덱스가 0부터 시작하는 문자열 word가 주어지고, 영어 소문자로 구성된다. 하나의 인덱스를 선택하고 word에서 모든 문자의 나타나는 빈도가 같아지도록 인덱스의 문자를 word에서 제거해라.
word에서 모든 문자의 빈도가 같도록 하나의 문자만 제거하는게 가능하면 true, 그렇지 않다면 false를 반환해라.
#1
Input: word = "abcc"
Output: true
Explanation: 인덱스 3을 선택하고 제거해라. word는 "abc"가 되고 각 문자는 1의 빈도를 가진다.
#2
Input: word = "aazz"
Output: false
Explanation: 하나의 문자를 지워야만 해서, "a"의 빈도가 1이고 "z"의 빈도가 2가 되거나 또는 반대이다. 나타나는 모든 문자는 같은 빈도로 만드는 것이 불가능하다.
class Solution {
public boolean equalFrequency(String word) {
int[] letters = new int[26];
for(char c : word.toCharArray()){
letters[c - 'a']++;
}
for(int i = 0; i < 26; i++){
if(letters[i] == 0){
continue;
}
letters[i]--;
if(isValid(letters)){
return true;
}
letters[i]++;
}
return false;
}
private boolean isValid(int[] letters){
int expected = 0;
for(int letter : letters){
if(letter == 0){
continue;
}
if(expected == 0){
expected = letter;
}else if(letter != expected){
return false;
}
}
return true;
}
}