Это вопрос LeetCode:
Для заданной строки найдите в ней первый неповторяющийся символ и верните его индекс. Если он не существует, верните -1.
Примеры:
s = leetcode
возвращает 0.
s = loveleetcode,
вернуть 2.
Примечание. Вы можете предположить, что строка содержит только строчные буквы.
Это интересный вопрос, который можно решить, используя dictionary
в Python.
Позвольте мне сначала объяснить мое неправильное решение, но это решение может решить проблему, то есть найти первый повторяющийся символ во входной строке и вернуть его индекс.
check = {} for i in range(len(s)): if s[i] in check: if check[s[i]] == 1: return i else: check[s[i]] = 1
Ну, в начале я продолжаю заставлять себя думать таким образом, чтобы использовать dictionary
, который содержит key-value
типов, где key
— проверенный символ, если он есть, и оцениваю количество вхождений этого ключа на данный момент. Однако на самом деле для решения этой проблемы лучше использовать dictionary
дважды.
Во-первых, я сохраняю последовательность символов входной строки в объект check
dictionary. Здесь я использую метод dict.get()
, который возвращает значение для данного ключа. Если ключ не может быть найден в объекте dict
, возвращается значение по умолчанию (по умолчанию — None). Таким образом, первый цикл for сохраняет встречающиеся символы и соответствующие им частоты. Второй цикл состоит в том, чтобы снова перебрать последовательность строк, если следующий символ существует и количество вхождений равно 1
, а затем вернуть индекс этого символа. В противном случае возвращает -1
. Используя этот метод, мы находим первый уникальный символ в строке.
class Solution(object): def firstUniqChar(self, s): """ :type s: str :rtype: int """ check = {} for elem in s: check[elem] = check.get(elem, 0) + 1 for i, n in enumerate(s): if check[n] and check[n] == 1: return i return -1