Вступ
Маніпуляція рядками — це важлива навичка для розробників, і однією з поширених задач є підрахунок кількості рядків у масиві, які починаються з певного префікса. Це завдання полягає в перевірці кожного слова в масиві, щоб визначити, чи починається воно з заданого рядка або префікса. У цьому посібнику ми розглянемо рішення цієї задачі і покроково пройдемо через реалізацію коду.
Постановка задачі
Нам дано масив рядків 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
— довжина префікса. -
Просторова складність: 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 для маніпуляції рядками, ми можемо швидко знаходити збіги. Ця задача є чудовим вправою для практики основ маніпуляцій з рядками та ітерації.
Успіхів у програмуванні! 🚀
Перекладено з: What is a Skeleton Screen? A real-life Flutter example