Разбор задачи: Первый уникальный символ в строке

Предложенный нами код решения:

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.

Пример работы функции

  1. Вход: "leetcode"
    • Частоты символов: {'l': 1, 'e': 2, 't': 1, 'c': 1, 'o': 1, 'd': 1}
    • Первый уникальный символ: 'l' (индекс 0).
  2. Вход: "loveleetcode"
    • Частоты символов: {'l': 2, 'o': 2, 'v': 1, 'e': 4, 't': 1, 'c': 1, 'd': 1}
    • Первый уникальный символ: 'v' (индекс 2).
  3. Вход: "aabb"
    • Частоты символов: {'a': 2, 'b': 2}
    • Уникальных символов нет → возвращается -1.

 


0

Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии