Шерлок считает строку действительной, если все символы строки встречаются одинаковое количество раз. Также допустимо, если он может удалить только символ 1 по индексу 1 в строке, а остальные символы будут встречаться одинаковое количество раз. Учитывая строку, определите, действительна ли она. Если да, верните YES, в противном случае верните NO.
Например, если s = ab c, это допустимая строка, потому что частоты: {a: 1, b: 1, c : 1} . То есть s = ab cc, потому что мы можем удалить один c и получить 1 каждого символа в оставшейся строке. Однако, если s = ab cc, строка недействительна, так как мы можем удалить только 1 вхождение c. Это оставит частоту символов {a: 1, b: 1, c: 1} .
Описание функции
Завершите функцию isValid в редакторе ниже . Он должен возвращать либо строку YES , либо строку NO .
isValid имеет следующие параметры:
s: строка
Формат ввода
Одна строка.
Ограничения
1 <= | s | <= 10 ^ 5 Каждый символ s [i] asciii [az] </p>
Формат вывода
Выведите YES, если строка действительна, в противном случае выведите NO.
Пример ввода 0 aabbcd Пример вывода 0 NO
Пример ввода 1 aabbccddeefghi
Пример вывода 1 НЕТ
Ниже мой код -
static String isValid(String s1) {
int arr[] = new int[26];
final String YES = "YES";
final String NO = "NO";
for(int i=0;i<s1.length();i++){
arr[s1.charAt(i)-'a']++;
}
Arrays.sort(arr);
int i=0;
while(arr[i] == 0){
i++;
}
int min=i;
int max=25;
String isValid = NO;
if(arr[min] == arr[max]) return isValid=YES;
else if(arr[max]-arr[min] == 1){
if( arr[max-1] == arr[min]) return isValid=YES;
if( arr[min]==1 && arr[min+1] == arr[max]) return isValid=YES;
}
return isValid;
}