Шерлок считает строку допустимой, если все символы строки встречаются одинаковое количество раз. Также допустимо, если он может удалить только один символ по одному индексу в строке, а остальные символы встретятся такое же количество раз. Учитывая строку, определите, является ли она допустимой.
Например, если s="abc", это допустимая строка, поскольку частоты равны {a:1,b: 1,в:1}. То же самое и с abcc, потому что мы можем удалить один символ c и оставить по одному символу каждого символа в оставшейся строке. Однако если s='abccc', строка недействительна, поскольку мы можем удалить только 1 вхождение c . В результате частоты символов останутся {a:1,b:1,c:2}.
Это ссылка:
https://www. hackerrank.com/challenges/sherlock-and-valid-string/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=strings
Одним из 5 неудачных тестовых случаев будет:
aaaabbcc должен выдать ложь, но он выдаёт мне истину.
aabbc должен выдать истину, но выдаёт мне ложь.
Но почему-то 5 моих тестовых примеров оказались неверными:
Вот следующая программа.
Код: Выделить всё
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
public class SherlokValidString
{
boolean is_valid(String s)
{
int count=0;
HashMap map = new HashMap();
char[] str_arr= s.toCharArray();
for(char c:str_arr)
{
if(map.containsKey(c))
{
map.put(c, map.get(c)+1);
}
else
{
map.put(c,1);
}
}
if (map.size()==1)
{
return true;
}
else {
List ll=new ArrayList(map.values());
System.out.println(ll);
Collections.sort(ll);
int first_element=(int)ll.get(0);
for(int i=1;i
Подробнее здесь: [url]https://stackoverflow.com/questions/51569165/sherlock-and-the-valid-string-giving-me-wrong-results-in-5-test-cases[/url]