⚡️ Задача: найдите первый неповторяющийся символ в строке, выполнив только один обход
Для заданной строки найдите в ней первый неповторяющийся символ, выполнив только один ее обход.
Например,
Простым решением было бы сохранить количество каждого символа в словаре или списке, пройдя его один раз.
Затем еще раз просмотреть строку, чтобы найти первый символ, имеющий значение 1. Временная сложность этого решения равна O(n), где n длина входной строки. Проблема с этим решением заключается в том, что строка проходится дважды, что нарушает ограничения программы.
Мы можем решить эту задачу за один обход строки. Идея состоит в том, чтобы использовать словарь для хранения количества каждого отдельного символа и индекса его первого или последнего вхождения в строку. Затем пройтись по словарю и найти символ с минимальным индексом строки.
👉 Пишите ваше решение в комментариях👇
@python_job_interview
Для заданной строки найдите в ней первый неповторяющийся символ, выполнив только один ее обход.
Например,
Input:
string is ABCDBAGHC
Output:
первый неповторяющийся символ: D
Простым решением было бы сохранить количество каждого символа в словаре или списке, пройдя его один раз.
Затем еще раз просмотреть строку, чтобы найти первый символ, имеющий значение 1. Временная сложность этого решения равна O(n), где n длина входной строки. Проблема с этим решением заключается в том, что строка проходится дважды, что нарушает ограничения программы.
Мы можем решить эту задачу за один обход строки. Идея состоит в том, чтобы использовать словарь для хранения количества каждого отдельного символа и индекса его первого или последнего вхождения в строку. Затем пройтись по словарю и найти символ с минимальным индексом строки.
# Функция поиска первого неповторяющегося символа в
# строк
е, выполнив только один ее обход
def findNonRepeatingChar(s):
# Базовый вариант
if not s:
return -1
# словарь # для хранения количества символов и индекса их
# последнее вхождение в строку
d = {}
for index, char in enumerate(s):
frequency, prevIndex = d.get(char, (0, index))
d[char] = (frequency + 1, index)
# хранит индекс первого неповторяющегося символа
min_index = -1
# Проходим словарь и находим символ
for key, values in d.items():
count, firstIndex = values
if count == 1 and (min_index == -1 or firstIndex < min_index):
min_index = firstIndex
return min_index
if __name__ == '__main__':
s = 'ABCDBAGHC'
index = findNonRepeatingChar(s)
if index != -1:
print('первый неповторяющийся символ: ', s[index])
else:
print('Таких символов нет')
👉 Пишите ваше решение в комментариях👇
@python_job_interview