TGViewer
Алгоритмы - Собеседования, Олимпиады, ШАД Алгоритмы - Собеседования, Олимпиады, ШАД @algoses · 12.1K subscribers
Post #634 1.1K
Задача с собеседования в Zoho

Даны две строки s и t. Определите, являются ли они изоморфными.
Две строки s и t называют изоморфными, если символы в строке s можно заменить так, чтобы получить t.
Все вхождения определённого символа должны быть заменены другим символом с сохранением порядка следования символов. Никакие два разных символа не могут заменяться одним и тем же символом, однако, символ может быть заменён на самого себя.

Пример 1:
Input: s = "egg", t = "add"
Output: true
Explanation: Строки s и t можно сделать идентичными, если:
Заменить "e" на "a".
Заменить "g" на "d".

Пример 2:
Input: s = "f11", t = "b23"
Output: false
Explanation: Строки s и t невозможно сделать идентичными, так как символ "1" должен соответствовать одновременно и "2" и, "3".

Пример 3:
Input: s = "paper", t = "title"
Output: true

Ограничения:
1 <= s.length <= 5 * 10⁴
t.length == s.length
s и t состоят из любых допустимых символов ASCII.

НАШ ЧАТ АЛГОРИТМИСТОВ

Решение
Для изоморфности двух строк необходимо, чтобы обеспечивалось взаимно-однозначное соответствие:
- каждому эл-ту первой строки соответствует ровно один эл-т второй строки;
- и наоборот, каждый эл-т второй строки связан ровно с одним эл-том первой строки.

Создаём два словаря для двусторонней проверки соответствия:
s_to_t - гарантирует, что один и тот же символ из s не будет превращён в разные символы в t
t_to_s - гарантирует обратное условие: один и тот же символ из t не будет получаться из разных символов s

Проходим по двум строкам одновременно с помощью функции zip(), объединяющей эл-ты из двух строк в пары символов:
Если char_s уже встречался ранее и соответствовал другому символу, а не char_t ИЛИ
Если char_t уже был получен из другого символа строки s, а не из char_s:
- изоморфность нарушена => возвращаем False.

Иначе - записываем новые двухсторонние соответствия:
- в какой символ t превращается символ из s;
- из какого символа s получается символ t.

Если правила ни разу не нарушились, значит, строки изоморфны => возвращаем True.


Сложность
O(n) - по времени (проходим по строке один раз; операции со словарем - за O(1))
O(n) - по памяти (в худшем случае, когда все символы уникальные)


Код
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
s_to_t, t_to_s = {}, {}

for char_s, char_t in zip(s, t):
if (char_s in s_to_t and s_to_t[char_s] != char_t) or \
(char_t in t_to_s and t_to_s[char_t] != char_s):
return False

s_to_t[char_s] = char_t
t_to_s[char_t] = char_s

return True


@algoses
  • 👍 5
  • ❤ 1
More from @algoses
  1. Sep 19, 2026Полный цикл отбора в Spectral на SWE (HFT) Недавно рассказывали про отбор в Fast Forward н…
  2. Sep 18, 2026❗️ Яндекс открыл Intern Week Offer на стажировку, где всего за неделю ты можешь получить о…
  3. Sep 18, 2026Задача с собеседования в Zeta Зима близко! Во время соревнования ваша первая задача - спро…
  4. Sep 17, 2026Как стать квантом Сегодня многие талантливые амбициозные ребята хотят попасть в хфт и стат…
  5. Sep 13, 2026Как и зачем тащить ICPC ICPC в большинстве регионов проходит в 4 этапа. Даты зависят от ре…
  6. Sep 12, 2026Как попасть в HFT компанию HFT компании зарабатывают на небольших изменениях цен, осуществ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →