🔥 Разбор задачи LeetCode #242: Valid Anagram
Даны две строки s и t. Нужно определить, являются ли они анаграммами друг друга.
Анаграмма — это слово, образованное путём перестановки букв другого слова.
✅ s = "listen" t = "silent" -> True
✅ s = "racecar" t = "carrace" -> True
❌ s = "jar" t = "jam" -> False
💡 Решение:
1. Проверяем, равна ли длина строк. Если нет — сразу
2. Считаем, сколько раз каждая буква встречается в s. (заносим это в словарь)
3. Уменьшаем счётчик для каждой буквы из t. (обращаемся к словарю)
4. Если где-то счётчик уходит в минус или буквы нет — это не анаграмма.
5. Если всё прошло — строки анаграммы. Выводим
💡Подробное видео решение и более простой способ снизу 👇
https://neetcode.io/solutions/valid-anagram
t.me/IT_Python_ZheglY | #LeetCode
Даны две строки s и t. Нужно определить, являются ли они анаграммами друг друга.
Анаграмма — это слово, образованное путём перестановки букв другого слова.
✅ s = "listen" t = "silent" -> True
✅ s = "racecar" t = "carrace" -> True
❌ s = "jar" t = "jam" -> False
💡 Решение:
1. Проверяем, равна ли длина строк. Если нет — сразу
False
2. Считаем, сколько раз каждая буква встречается в s. (заносим это в словарь)
3. Уменьшаем счётчик для каждой буквы из t. (обращаемся к словарю)
4. Если где-то счётчик уходит в минус или буквы нет — это не анаграмма.
5. Если всё прошло — строки анаграммы. Выводим
True
💡Подробное видео решение и более простой способ снизу 👇
https://neetcode.io/solutions/valid-anagram
t.me/IT_Python_ZheglY | #LeetCode
🔥LeetCode: Valid Parentheses — #20
Проверяем, правильно ли расставлены скобки ()[]{}
Пример:
✅ "( { [ ] } )" → Верно
✅ "( ) [ ] { }" → Верно
❌ "( ]" → Неверно
🧠 Как работает код:
1. Открывающие скобки кидаем в s
2. Eсли стек пуст или скобки не совпадают возвращаем F
3. Если всё ок — убираем из стека скобку
В конце стек должен быть пуст, это значит скобки правильно закрыты
💡Подробное видео решение
https://neetcode.io/problems/validate-parentheses
t.me/IT_Python_ZheglY | #LeetCode
Проверяем, правильно ли расставлены скобки ()[]{}
Пример:
✅ "( { [ ] } )" → Верно
✅ "( ) [ ] { }" → Верно
❌ "( ]" → Неверно
🧠 Как работает код:
1. Открывающие скобки кидаем в s
tack
2. Eсли стек пуст или скобки не совпадают возвращаем F
alse
3. Если всё ок — убираем из стека скобку
В конце стек должен быть пуст, это значит скобки правильно закрыты
💡Подробное видео решение
https://neetcode.io/problems/validate-parentheses
t.me/IT_Python_ZheglY | #LeetCode
🔥 Разбор задачи LeetCode #121: Best Time to Buy and Sell Stock
Дан массив цен на акцию prices, где prices[i] — цена акции в день i. Нужно найти максимальную прибыль, купив и продав акции ровно один раз (купить раньше, чем продавать). Если прибыль получить нельзя, вернуть 0.
Пример:
✅ [7,1,5,3,6,4] -> 5
Покупаем в день 2 (цена = 1) и продаем в день 5 (цена = 6), прибыль = 6-1 = 5.
❌ [7,6,4,3,1] -> 0 # максимальная прибыль 0
💡 Идея решения:
1. Проходим по массиву цен, отслеживая минимальную цену покупки на текущий момент.
2. В каждый день вычисляем потенциальную прибыль, если продать акцию именно сегодня (текущая цена минус минимальная цена).
3. Обновляем максимум прибыли, если текущая прибыль больше предыдущего максимума.
💡Подробное видео решение
https://neetcode.io/solutions/best-time-to-buy-and-sell-stock
t.me/IT_Python_ZheglY | #LeetCode
Дан массив цен на акцию prices, где prices[i] — цена акции в день i. Нужно найти максимальную прибыль, купив и продав акции ровно один раз (купить раньше, чем продавать). Если прибыль получить нельзя, вернуть 0.
Пример:
✅ [7,1,5,3,6,4] -> 5
Покупаем в день 2 (цена = 1) и продаем в день 5 (цена = 6), прибыль = 6-1 = 5.
❌ [7,6,4,3,1] -> 0 # максимальная прибыль 0
💡 Идея решения:
1. Проходим по массиву цен, отслеживая минимальную цену покупки на текущий момент.
2. В каждый день вычисляем потенциальную прибыль, если продать акцию именно сегодня (текущая цена минус минимальная цена).
3. Обновляем максимум прибыли, если текущая прибыль больше предыдущего максимума.
💡Подробное видео решение
https://neetcode.io/solutions/best-time-to-buy-and-sell-stock
t.me/IT_Python_ZheglY | #LeetCode
🔥1
🔥Разбор задачи Valid Palindrome (LeetCode #125)
Нужно определить, является ли строка палиндромом — читается ли она одинаково вперёд и назад, игнорируя пробелы, регистр и знаки препинания.
✅ "Madam" -> True
✅ "Was it a car or a cat I saw?" -> True
❌ "race a car" -> False
💡Пояснение кода:
• Перебираем каждый символ в строке string и приводим все буквы к нижнему регистру если если символ — буква или цифра.
• Собираем все такие символы обратно в одну строку clean.
• Сравниваем clean с её перевёрнутым вариантом.
Другие способы решения можно посмотреть здесь👇
https://neetcode.io/solutions/valid-palindrome
t.me/IT_Python_ZheglY | #LeetCode
Нужно определить, является ли строка палиндромом — читается ли она одинаково вперёд и назад, игнорируя пробелы, регистр и знаки препинания.
✅ "Madam" -> True
✅ "Was it a car or a cat I saw?" -> True
❌ "race a car" -> False
💡Пояснение кода:
• Перебираем каждый символ в строке string и приводим все буквы к нижнему регистру если если символ — буква или цифра.
• Собираем все такие символы обратно в одну строку clean.
• Сравниваем clean с её перевёрнутым вариантом.
Другие способы решения можно посмотреть здесь👇
https://neetcode.io/solutions/valid-palindrome
t.me/IT_Python_ZheglY | #LeetCode
🔥3
🔥Разбор задачи LeetCode #136: Single Number
• Дан массив чисел, в котором все числа встречаются дважды, кроме одного — найти этот единственный элемент.
Input: [2, 2, 1]
Output: 1
💡 Идея решения и разбор кода:
• Используем XOR — побитовое исключающее ИЛИ
• Если применить XOR ко всем элементам массива, пары исчезнут и останется только один уникальный элемент.
1. Инициализируем переменную result значением 0 (переменная будет хранить промежуточный результат операции XOR)
2. Проходимся по циклу сравнивая биты чисел. Если биты совпадают — результат 0, иначе 1.
x ^ x = 0
x ^ 0 = x
Таким образом пары одинаковых чисел "обнуляются", оставляя только уникальные числа.
📊 Сложность:
Время: O(n), где n — длина массива.
Память: O(1).
Ссылка на задачу LeetCode👇
https://leetcode.com/problems/single-number/description/
❗️Более подробно о логического оператор XOR разборем в следующем посте
t.me/IT_Python_ZheglY | #LeetCode
• Дан массив чисел, в котором все числа встречаются дважды, кроме одного — найти этот единственный элемент.
Input: [2, 2, 1]
Output: 1
💡 Идея решения и разбор кода:
• Используем XOR — побитовое исключающее ИЛИ
• Если применить XOR ко всем элементам массива, пары исчезнут и останется только один уникальный элемент.
1. Инициализируем переменную result значением 0 (переменная будет хранить промежуточный результат операции XOR)
2. Проходимся по циклу сравнивая биты чисел. Если биты совпадают — результат 0, иначе 1.
x ^ x = 0
x ^ 0 = x
Таким образом пары одинаковых чисел "обнуляются", оставляя только уникальные числа.
📊 Сложность:
Время: O(n), где n — длина массива.
Память: O(1).
Ссылка на задачу LeetCode👇
https://leetcode.com/problems/single-number/description/
❗️Более подробно о логического оператор XOR разборем в следующем посте
t.me/IT_Python_ZheglY | #LeetCode
🔥1
🔥Задача с LeetCode #344: Reverse String
Необходимо развернуть список символов in-place, т.е. без создания нового списка.
Input: ["n","e","e","t"]
Output: ["t","e","e","n"]
💡Идея решения:
• Создаём два указателя — left в начале, right в конце.
• Пока они не встретятся, меняем местами s[left] и s[right].
• После каждой замены сдвигаем указатели навстречу друг другу.
💡Альтернативное решение:
🖥 Подробное видео решение можно посмотреть здесь👇
https://neetcode.io/solutions/reverse-string
@IT_Python_ZheglY | #leetcode #python
Необходимо развернуть список символов in-place, т.е. без создания нового списка.
Input: ["n","e","e","t"]
Output: ["t","e","e","n"]
💡Идея решения:
• Создаём два указателя — left в начале, right в конце.
• Пока они не встретятся, меняем местами s[left] и s[right].
• После каждой замены сдвигаем указатели навстречу друг другу.
💡Альтернативное решение:
def reverseString(s):
s.reverse()
🖥 Подробное видео решение можно посмотреть здесь👇
https://neetcode.io/solutions/reverse-string
@IT_Python_ZheglY | #leetcode #python
❤4
🔥Задача с LeetCode #647: Palindromic Substrings
🔜 Требуется подсчитать количество палиндромных подстрок в заданной строке.
Палиндром - это строка, которая читается одинаково как слева направо, так и справа налево.
Input: s = "aaa"
Output: 6
Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa"
💡 Идея решения:
Алгоритм основан на идее, что каждый палиндром в строке имеет центр (или два центра для палиндромов четной длины). Он проходит по всем возможным центрам и "расширяется" в обе стороны, проверяя, образуется ли палиндром.
🔵 В нечетных палиндромах каждый символ рассматриваем как центр
🔵 В четных палиндромах каждую пару соседних символов рассматриваем как центр
🖥 Подробное видео решение можно посмотреть здесь
@IT_Python_ZheglY | #leetcode #python
Палиндром - это строка, которая читается одинаково как слева направо, так и справа налево.
Input: s = "aaa"
Output: 6
Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa"
Алгоритм основан на идее, что каждый палиндром в строке имеет центр (или два центра для палиндромов четной длины). Он проходит по всем возможным центрам и "расширяется" в обе стороны, проверяя, образуется ли палиндром.
@IT_Python_ZheglY | #leetcode #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥9❤8🍓2🤮1💋1
🔥Задача с Leetcode #206: Reverse Linked List
🔜 Дана голова односвязного списка. Нужно развернуть список и вернуть новую голову.
Исходный список: 1 -> 2 -> 3 -> 4 -> 5
Развёрнутый: 5 -> 4 -> 3 -> 2 -> 1
🔖 Разбор кода:
🔵 prev (previous) - Хранит предыдущий узел, который станет следующим при развороте.
🔵 curr (current) - Текущий узел, который мы обрабатываем.
🔵 next_node - Временное хранилище для следующего узла перед разворотом
💡 Идея алгоритма:
🔵 Сохраняем next_node — чтобы не потерять следующий узел после изменения ссылки.
🔵 Разворачиваем ссылку —
🔵 Сдвигаем указатели — двигаем prev и curr вперёд.
🖥 Подробное решение можно посмотреть здесь
🧑💻 @IT_Python_ZheglY | #leetcode #python
Исходный список: 1 -> 2 -> 3 -> 4 -> 5
Развёрнутый: 5 -> 4 -> 3 -> 2 -> 1
curr.next
теперь указывает на prev.Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7👏5🔥1🤮1🍓1
Условие:
Даны две строки s и t. Проверить, является ли s подпоследовательностью t.
Что такое подпоследовательность?
Это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов без изменения порядка оставшихся элементов.
Примеры:
s = "abc", t = "ahbgdc" → true
s = "axc", t = "ahbgdc" → false
Сложность:
⏰ Время: O(n) - проходим по строке t один раз
💾 Память: O(1) - используем только константную память
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3