Ransom Note

https://leetcode.com/problems/ransom-note/description/Easy

Условие

Даны две строки ransomNote и magazine. Нужно определить, можно ли составить строку ransomNote из символов строки magazine. Каждый символ строки magazine можно использовать не более одного раза.

Примеры

Input: ransomNote = "a", magazine = "b"

Output: false
Input: ransomNote = "aa", magazine = "ab"

Output: false
Input: ransomNote = "aa", magazine = "aab"

Output: true

Решение

fun canConstruct(ransomNote: String, magazine: String): Boolean {
    val charCount = IntArray(26)  // Массив для подсчета количества каждой буквы в magazine

    // Подсчитываем количество каждой буквы в magazine
    for (char in magazine) {
        charCount[char - 'a']++
    }

    // Проверяем, можно ли составить ransomNote из magazine
    for (char in ransomNote) {
        if (charCount[char - 'a'] == 0) {
            return false  // Если буквы недостаточно, вернуть false
        }
        charCount[char - 'a']--  // Уменьшаем количество использованной буквы
    }

    return true  // Если все буквы найдены, вернуть true
}

Временная сложность

O(n + m), где n — длина magazine, а m — длина ransomNote, так как мы проходим по каждой строке один раз.

Пространственная сложность

O(1), так как используется фиксированный массив размера 26 для хранения количества букв.