package main
import (
"fmt"
"unicode"
)
/*
ContainsWordLetters reports whether all letters in word can be
formed from the letters available in sentence.
Rules:
- Letter order does not matter.
- Comparison is case-insensitive.
- Non-letter characters are ignored.
*/
func ContainsWordLetters(sentence, word string) bool {
var available [26]int
// Count available letters in the sentence.
for _, r := range sentence {
r = unicode.ToLower(r)
if r >= 'a' && r <= 'z' {
available[r-'a']++
}
}
// Consume letters required by the word.
for _, r := range word {
r = unicode.ToLower(r)
if r < 'a' || r > 'z' {
continue
}
index := r - 'a'
available[index]--
if available[index] < 0 {
return false
}
}
return true
}
func main() {
sentence := "Bright stars shine above calm valleys at night."
fmt.Println(ContainsWordLetters(sentence, "satellite")) // true
fmt.Println(ContainsWordLetters(sentence, "satellllite")) // false
}
/*
run:
true
false
*/