Программа курса:
Разбор задачи: Первый уникальный символ в строке
Предложенный нами код решения:
def first_unique_char(s):
"""
:param s: строка для поиска первого неповторяющегося символа
:return: индекс первого неповторяющегося символа, либо -1, если такого символа нет
"""
# Подсчёт частоты каждого символа
char_count = {}
for char in s:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
# Поиск первого символа с частотой 1
for index, char in enumerate(s):
if char_count[char] == 1:
return index
return -1Функция first_unique_char(s) определяет индекс первого символа в строке s, который не повторяется. Если такого символа нет, она возвращает -1.
1. Инициализация словаря для подсчёта частоты символов
char_count = {}
- Создаётся пустой словарь
char_count, который будет использоваться для хранения количества вхождений каждого символа из строкиs.
2. Заполнение словаря с частотой символов
for char in s:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
- Для каждого символа
charиз строки:- Если символ уже есть в словаре
char_count, его значение увеличивается на1. - Если символа нет в словаре, он добавляется с начальным значением
1.
- Если символ уже есть в словаре
Пример работы с s = "loveleetcode":
После прохождения цикла словарь выглядит так:
{'l': 2, 'o': 2, 'v': 1, 'e': 4, 't': 1, 'c': 1, 'd': 1}
3. Поиск первого уникального символа
for index, char in enumerate(s):
if char_count[char] == 1:
return index
- Функция проходит строку
sпо индексам с помощьюenumerate. - Для каждого символа проверяется его частота в словаре:
- Если частота равна
1, возвращается текущий индекс.
- Если частота равна
Пример работы с s = "loveleetcode":
- Итерируется строка:
'l'(индекс 0): частота 2 → пропускается.'o'(индекс 1): частота 2 → пропускается.'v'(индекс 2): частота 1 → возвращается индекс2.
4. Если уникальных символов нет
return -1
- Если цикл завершился и не было найдено ни одного символа с частотой
1, функция возвращает-1.
Пример работы с s = "aabb":
Частоты символов:
{'a': 2, 'b': 2}- Все символы имеют частоту больше
1, поэтому возвращается-1.
Пример работы функции
- Вход:
"leetcode"- Частоты символов:
{'l': 1, 'e': 2, 't': 1, 'c': 1, 'o': 1, 'd': 1} - Первый уникальный символ:
'l'(индекс0).
- Частоты символов:
- Вход:
"loveleetcode"- Частоты символов:
{'l': 2, 'o': 2, 'v': 1, 'e': 4, 't': 1, 'c': 1, 'd': 1} - Первый уникальный символ:
'v'(индекс2).
- Частоты символов:
- Вход:
"aabb"- Частоты символов:
{'a': 2, 'b': 2} - Уникальных символов нет → возвращается
-1.
- Частоты символов:
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии