TGViewer
Swift | LeetCode Swift | LeetCode @easy_swift_task · 1.3K subscribers
Post #1450 82
Задача: 1255. Maximum Score Words Formed by Letters
Сложность: hard

Даны список слов, список отдельных букв (могут повторяться) и оценка каждого символа. Верните максимальную оценку любого правильного набора слов, образованного с помощью заданных букв (words[i] не может быть использовано два или более раз). Не обязательно использовать все символы в буквах, каждая буква может быть использована только один раз. Оценка букв 'a', 'b', 'c', ... , 'z' задаются значениями score[0], score[1], ... , score[25] соответственно.

Пример:
Input: words = ["dog","cat","dad","good"], letters = ["a","a","c","d","d","d","g","o","o"], score = [1,0,9,5,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0]
Output: 23


👨‍💻 Алгоритм:

1⃣Создайте функцию для вычисления оценки слова.

2⃣Используйте метод перебора подмножеств (или битовое представление всех подмножеств) для нахождения всех возможных комбинаций слов.
Для каждой комбинации проверяйте, можно ли составить каждое слово из доступных букв.

3⃣Вычислите суммарную оценку для каждой допустимой комбинации слов и сохраните максимальную оценку.

😎 Решение:
class Solution {
func maxScoreWords(_ words: [String], _ letters: [Character], _ score: [Int]) -> Int {
var letterCount = [Character: Int]()
for ch in letters {
letterCount[ch, default: 0] += 1
}

func wordScore(_ word: String) -> Int {
var total = 0
for ch in word {
total += score[Int(ch.asciiValue! - Character("a").asciiValue!)]
}
return total
}

func canFormWord(_ word: String, _ letterCount: [Character: Int]) -> Bool {
var count = [Character: Int]()
for ch in word {
count[ch, default: 0] += 1
if count[ch]! > letterCount[ch, default: 0] {
return false
}
}
return true
}

var maxScore = 0
let n = words.count
for i in 1..<1<<n {
var currScore = 0
var usedLetters = [Character: Int]()
var valid = true
for j in 0..<n {
if (i & 1<<j) != 0 {
let word = words[j]
if canFormWord(word, letterCount) {
currScore += wordScore(word)
for ch in word {
usedLetters[ch, default: 0] += 1
}
} else {
valid = false
break
}
}
}
if valid {
maxScore = max(maxScore, currScore)
}
}

return maxScore
}
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_swift_task
  1. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для iOS разработчика, которые нигде больше не публ…
  2. Oct 4, 2026Задача: 523. Continuous Subarray Sum Сложность: medium Дан целочисленный массив nums и цел…
  3. Oct 4, 2026Задача: 1329. Sort the Matrix Diagonally Сложность: medium Диагональ матрицы — это диагона…
  4. Oct 3, 2026Задача: 200. Number of Islands Сложность: medium Дана двумерная бинарная сетка размером m…
  5. Oct 2, 2026Задача: 246. Strobogrammatic Number Сложность: easy Дана строка num, представляющая собой…
  6. Sep 29, 2026Задача: 644. Maximum Average Subarray II Сложность: hard Вам дан целочисленный массив nums…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →