@@EugeneSuleimanov лучики поддержки вам в этом деле☝🏼☝🏼 Только один момент: уберите, плз, из плейлиста "Задачи литкод" стендап чебаткова: он тут вообще ни к чему.
Хороший разбор вариантов. Задачка не сложная, но добиться минимальной сложности всегда надо подумать. Было бы круто такие же видосы делать с задачками посложнее.
Третье решение для юникода может быть таким: public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } var map = s.chars() .mapToObj(c -> (char) c) .collect(Collectors.groupingBy(c -> c, Collectors.counting())); t.chars() .mapToObj(c -> (char) c) .forEach(c -> map.compute(c, (k, v) -> v == null ? -1 : --v)); return map.values().stream().noneMatch(count -> count != 0L); } Беда лишь в том, что оба решения неверные. Дело в том, что юникодные символы находятся в пространстве 32-х битных значений, но в Java используется UTF-16, в котором char - это, на самом деле не символ, вернее не всегда символ, а так называемый code point. Чаще всего первых 16-и бит достаточно для представления символов обычных языков или Basic Multilingual Plane (BMP) и тогда в char находится именно символ. Но иногда символ может кодироваться двумя 16-и битными значениями и тогда каждое из этих значений в отдельности символом не является. Для проверки этого даже есть метод Character.isLetter() Примеры символов, требующих два char значения: 𨭎 𠬠 𩷶 Если эти char значения в паре поменять местами, получится другой символ и такая якобы анаграмма на самом деле вовсе не анаграмма. На leetcode этого не учли и поэтому наши решения проходят тестирование, хотя не должны.
Про первый вариант решения. Там ведь не просто O(n log n), а O(n log n) + O(n log n) + N\2. Где N\2 (среднее) это посимвольное сравнение, где в худшем случае будет сравнение до конца массивов, если строки равны. Как вы оцениваете такое решение на интервью от 1 до 10?
Я сейчас сам учусь на лит коде, было бы славное если бы ты много видосов дела на эту тему, по одной задачки в день, очень интересно смотреть
Спасибо за отзыв! Раз в день сложно, но стараюсь набивать коллекцию из 100 штук
@@EugeneSuleimanov
лучики поддержки вам в этом деле☝🏼☝🏼
Только один момент: уберите, плз, из плейлиста "Задачи литкод" стендап чебаткова: он тут вообще ни к чему.
@@manOfPlanetEarth спасибо, сделаю ))
Видимо, случайно попал )
Обожаю твои видео
Спасибо за поддержку!
Хороший разбор вариантов. Задачка не сложная, но добиться минимальной сложности всегда надо подумать.
Было бы круто такие же видосы делать с задачками посложнее.
Спасибо за отзыв!
Более сложные задачи в работе
Спасибо!)
Спасибо за комментарий!
Третье решение для юникода может быть таким:
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
var map = s.chars()
.mapToObj(c -> (char) c)
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));
t.chars()
.mapToObj(c -> (char) c)
.forEach(c -> map.compute(c, (k, v) -> v == null ? -1 : --v));
return map.values().stream().noneMatch(count -> count != 0L);
}
Беда лишь в том, что оба решения неверные. Дело в том, что юникодные символы находятся в пространстве 32-х битных значений, но в Java используется UTF-16, в котором char - это, на самом деле не символ, вернее не всегда символ, а так называемый code point. Чаще всего первых 16-и бит достаточно для представления символов обычных языков или Basic Multilingual Plane (BMP) и тогда в char находится именно символ. Но иногда символ может кодироваться двумя 16-и битными значениями и тогда каждое из этих значений в отдельности символом не является. Для проверки этого даже есть метод Character.isLetter()
Примеры символов, требующих два char значения: 𨭎 𠬠 𩷶
Если эти char значения в паре поменять местами, получится другой символ и такая якобы анаграмма на самом деле вовсе не анаграмма.
На leetcode этого не учли и поэтому наши решения проходят тестирование, хотя не должны.
Про первый вариант решения. Там ведь не просто O(n log n), а O(n log n) + O(n log n) + N\2. Где N\2 (среднее) это посимвольное сравнение, где в худшем случае будет сравнение до конца массивов, если строки равны. Как вы оцениваете такое решение на интервью от 1 до 10?
Коэффициенты не учитываются при оценке.
Евгений, сами решали или с помощью gpt chat?
Без chat gpt :)
Евгений, имеет ли смысл давать ссылку на профиль leetcode в резюме?
Не думаю. Вряд ли это будет сильно учитываться при отборе.
я решал эту задачу я такой там код написал как дом из 5 этажей)) и показывать стыдно)
🍿😐🍿
Если не секрет, расскажите почему решили продолжит решать задачки после столь длительного перерыва.
Продолжить цикл, и «вернуть форму»
+