#easy
Задача: 748. Shortest Completing Word
Вам дан целочисленный массив nums, в котором наибольшее целое число уникально. Определите, является ли наибольший элемент массива по крайней мере в два раза больше всех остальных чисел в массиве. Если да, то верните индекс самого большого элемента, в противном случае верните -1.
Пример:
👨💻 Алгоритм:
1⃣ Извлечь все буквы из licensePlate, игнорируя цифры и пробелы, и создать словарь для подсчета частоты каждой буквы.
2⃣ Пройти по массиву words, проверяя каждое слово на соответствие требованиям.
3⃣ Найти самое короткое завершающее слово среди подходящих.
😎 Решение:
Ставь 👍 и забирай 📚 Базу знаний
Задача: 748. Shortest Completing Word
Вам дан целочисленный массив nums, в котором наибольшее целое число уникально. Определите, является ли наибольший элемент массива по крайней мере в два раза больше всех остальных чисел в массиве. Если да, то верните индекс самого большого элемента, в противном случае верните -1.
Пример:
Input: licensePlate = "1s3 PSt", words = ["step","steps","stripe","stepple"]
Output: "steps"
package main
func shortestCompletingWord(licensePlate string, words []string) string {
licenseCount := getCharCount(licensePlate)
var result string
for _, word := range words {
if isCompletingWord(word, licenseCount) {
if result == "" || len(word) < len(result) {
result = word
}
}
}
return result
}
func getCharCount(s string) map[rune]int {
count := make(map[rune]int)
for _, c := range s {
if isLetter(c) {
count[toLower(c)]++
}
}
return count
}
func isCompletingWord(word string, licenseCount map[rune]int) bool {
wordCount := make(map[rune]int)
for _, c := range word {
wordCount[c]++
}
for char, cnt := range licenseCount {
if wordCount[char] < cnt {
return false
}
}
return true
}
func isLetter(c rune) bool {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
}
func toLower(c rune) rune {
if c >= 'A' && c <= 'Z' {
return c + 'a' - 'A'
}
return c
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM