Підрахунок слів з заданим префіксом: покроковий посібник з Ruby

pic

Вступ

Маніпулювання рядками є важливою навичкою для розробників, і однією з поширених задач, з якою ви можете стикнутися, є підрахунок кількості рядків у масиві, що починаються з певного префікса. Ця задача полягає в перевірці кожного слова в масиві, щоб з’ясувати, чи починається воно з заданого рядка або префікса. У цьому посібнику ми розглянемо рішення цієї проблеми та крок за кроком розберемо реалізацію коду.

Умова задачі

Вам дається масив рядків words і рядок pref. Ваше завдання — повернути кількість рядків у масиві words, які мають префікс pref.

Приклад

Приклад 1:

Вхід:

words = ["pay", "attention", "practice", "attend"]  
pref = "at"

Вихід: 2

Пояснення: Два рядки, що містять "at" як префікс: "attention" і "attend".

Приклад 2:

Вхід:

words = ["leetcode", "win", "loops", "success"]  
pref = "code"

Вихід: 0

Пояснення: Жоден рядок не містить "code" як префікс.

Обмеження

  • 1 ≤ words.length ≤ 100
  • 1 ≤ words[i].length, pref.length ≤ 100
  • words[i] і pref складаються з маленьких латинських літер.

Огляд рішення

Для вирішення цієї задачі потрібно пройти по кожному слову в масиві words і перевірити, чи починається воно з заданого префікса pref. Для цього можна використати вбудовані методи маніпулювання рядками в Ruby.

Рішення включає:

  1. Прохід по кожному слову в масиві words.
  2. Перевірка, чи починається слово з префікса pref.
  3. Підрахунок кількості слів, які відповідають умові.

Реалізація на Ruby

Крок 1: Оголошення допоміжної функції Створимо допоміжну функцію prefix_count, яка приймає масив слів і префікс, а потім повертає кількість слів, що починаються з цього префікса.

def prefix_count(words, pref)  
 count = 0  
 words.each do |word|  
 count += 1 if word[0...pref.length] == pref  
 end  
 count  
end

Крок 2: Пояснення коду

  1. Прохід по масиву слів:
  • Метод each використовується для перебору кожного слова в масиві words.

2. Перевірка префікса:

  • word[0...pref.length] == pref перевіряє, чи співпадає підрядок, що починається з першого символу і має таку ж довжину, як префікс, з рядком pref.

3. Підрахунок співпадінь:

  • Якщо підрядок збігається з префіксом, лічильник збільшується на 1.

4. Повернення лічильника:

  • Після завершення циклу функція повертає загальну кількість слів, які починаються з заданого префікса.

Розбір прикладів

Приклад 1: Вхід:

words = ["pay", "attention", "practice", "attend"]  
pref = "at"

Кроки:

  1. Проходимо масив слів.
  • “pay”: Не починається з "at".
  • “attention”: Починається з "at", тому збільшуємо лічильник (count = 1).
  • “practice”: Не починається з "at".
  • “attend”: Починається з "at", тому збільшуємо лічильник (count = 2).
  1. Вихід: 2.

Приклад 2: Вхід:

words = ["leetcode", "win", "loops", "success"]  
pref = "code"

Кроки:

  1. Проходимо масив слів.
  • “leetcode”: Не починається з "code".
  • “win”: Не починається з "code".
  • “loops”: Не починається з "code".
  • “success”: Не починається з "code".
  1. Вихід: 0.

Ефективність

  • Часова складність: Часова складність цього рішення — O(n * m), де n — кількість слів у масиві, а m — довжина префікса.
    Це пояснюється тим, що для кожного слова ми перевіряємо перші m символів, щоб з’ясувати, чи збігаються вони з префіксом.
  • Просторова складність: O(1), оскільки додаткове місце не використовується, окрім вхідних та вихідних даних.

Тестування рішення

Приклад 1:

words = ["pay", "attention", "practice", "attend"]  
pref = "at"  
puts prefix_count(words, pref) # Вихід: 2

Приклад 2:

words = ["leetcode", "win", "loops", "success"]  
pref = "code"  
puts prefix_count(words, pref) # Вихід: 0

Висновок

Це рішення пропонує простий і ефективний спосіб підрахунку кількості слів, що починаються з заданого префікса в масиві. Використовуючи вбудоване розрізання рядків у Ruby, ми швидко знаходимо відповідні слова. Ця задача є хорошою вправою для практики базового маніпулювання рядками та ітерацій.

Удачі в програмуванні! 🚀

Перекладено з: Counting Words With a Given Prefix: A Step-by-Step Guide in Ruby

Leave a Reply

Your email address will not be published. Required fields are marked *