Разбор задачи: Драгоценности и камни

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

 def numJewelsInStones(jewels: str, stones: str) -> int:
    return sum(1 for stone in stones if stone in jewels)
  • Основная идея решения:
    • Мы проверяем каждый камень в строке stones, является ли он драгоценным камнем из строки jewels.
    • Для каждого камня из stones, если этот камень встречается в jewels, увеличиваем счетчик.
  • Как работает функция:
    • sum(1 for stone in stones if stone in jewels):
      • Это выражение состоит из генератора. Генератор пробегает по каждому камню в строке stones.
      • Для каждого камня проверяется условие if stone in jewels. Если условие выполняется (т.е. текущий камень является драгоценным), то к сумме прибавляется 1.
      • Когда весь процесс завершен, результатом будет общее количество драгоценных камней из stones.
  • Подробное объяснение:
    • Строка stones представляет камни, которые у вас есть. Каждый символ в строке — это отдельный камень.
    • Строка jewels содержит типы драгоценных камней. Камень в строке stones считается драгоценным, если его символ присутствует в строке jewels.
    • Функция проходит через все камни в строке stones и проверяет, является ли каждый камень драгоценным (наличие его в строке jewels).
    • Для каждого такого камня добавляется единица к итоговому счетчику.
  • Пояснение работы генератора:
    • Генератор — это специальный объект, который позволяет перебирать элементы по одному, не создавая заранее всех значений. В данном случае он позволяет нам проверить каждый камень в строке stones.
    • Каждый раз, когда условие stone in jewels истинно, генератор генерирует 1, и все такие единички суммируются функцией sum().
  • Пример работы:
    • Если jewels = "aA", а stones = "aAAbbbb", то для каждого камня из stones мы проверим, встречается ли он в jewels:
      • Камень 'a' присутствует в jewels, значит добавляем 1.
      • Камень 'A' присутствует в jewels, значит добавляем еще 1.
      • Камень 'A' снова присутствует в jewels, добавляем 1.
      • Камни 'b' и 'b' не являются драгоценными, пропускаем их.
      • Камни 'b' и 'b' снова не являются драгоценными, их тоже пропускаем.
    • В итоге итоговая сумма будет равна 3, что и является правильным ответом.

 



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