Вступ
Маніпулювання рядками є важливою навичкою для розробників, і однією з поширених задач, з якою ви можете стикнутися, є підрахунок кількості рядків у масиві, що починаються з певного префікса. Ця задача полягає в перевірці кожного слова в масиві, щоб з’ясувати, чи починається воно з заданого рядка або префікса. У цьому посібнику ми розглянемо рішення цієї проблеми та крок за кроком розберемо реалізацію коду.
Умова задачі
Вам дається масив рядків 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.
Рішення включає:
- Прохід по кожному слову в масиві
words
. - Перевірка, чи починається слово з префікса
pref
. - Підрахунок кількості слів, які відповідають умові.
Реалізація на 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: Пояснення коду
- Прохід по масиву слів:
- Метод
each
використовується для перебору кожного слова в масивіwords
.
2. Перевірка префікса:
word[0...pref.length] == pref
перевіряє, чи співпадає підрядок, що починається з першого символу і має таку ж довжину, як префікс, з рядкомpref
.
3. Підрахунок співпадінь:
- Якщо підрядок збігається з префіксом, лічильник збільшується на 1.
4. Повернення лічильника:
- Після завершення циклу функція повертає загальну кількість слів, які починаються з заданого префікса.
Розбір прикладів
Приклад 1: Вхід:
words = ["pay", "attention", "practice", "attend"]
pref = "at"
Кроки:
- Проходимо масив слів.
- “pay”: Не починається з "at".
- “attention”: Починається з "at", тому збільшуємо лічильник (count = 1).
- “practice”: Не починається з "at".
- “attend”: Починається з "at", тому збільшуємо лічильник (count = 2).
- Вихід: 2.
Приклад 2: Вхід:
words = ["leetcode", "win", "loops", "success"]
pref = "code"
Кроки:
- Проходимо масив слів.
- “leetcode”: Не починається з "code".
- “win”: Не починається з "code".
- “loops”: Не починається з "code".
- “success”: Не починається з "code".
- Вихід: 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