い (и) и な(на) - прилагательные в Японском

Я не эксперт в японской фонетике, просто люблю учить новые вещи, как, например, японский язык. Так что это просто то, как я воспринимаю язык. Кроме того, все упрощено до уровня, когда это может быть понято всеми.

В японском языке существует два типа прилагательных: и-прилагательные и на-прилагательные. Типы названы по звуку, который соединяет прилагательное и существительное. Эти два типа интересны тем, что они склоняются по-разному. На-прилагательные ведут себя больше как существительные, а и-прилагательные имеют свой собственный путь.

Read More…

Один интересный код-челлендж с Leetcode: поиск анаграмм в строке

На моих собеседованиях по программированию я часто использую упрощенную версию этой задачи с Leetcode.

Даны две строки s и p, вернуть true, если s содержит анаграмму p.

Мне нравится эта задача, потому что решение можно постепенно улучшать, и есть много чего обсудить. От алгоритмической сложности до оптимизации на уровне кэша процессора. Здесь я хочу рассказать, как решил эту задачу в первый раз.

Самое затратное решение

Первое решение, которое приходит в голову: давайте создадим список всех возможных анаграмм, а затем просто проверим, есть ли одна из них в строке s. Звучит просто, не так ли? Но есть несколько проблем с этим подходом. Во-первых, реализация эффективного алгоритма для генерации всех возможных перестановок уже является достаточно сложной задачей. А во-вторых, временная сложность итогового решения будет примерно O(s*p!). Факториал растет очень быстро: 3! == 6, 5! == 120, 10! == 3,628,800, и вы не захотите с этим иметь дело.

Read More…