39 lines
707 B
Go
39 lines
707 B
Go
|
package main
|
||
|
|
||
|
import "slices"
|
||
|
|
||
|
func vowelStrings(words []string, queries [][]int) []int {
|
||
|
isVowel := func(c byte) bool {
|
||
|
return slices.Contains([]byte{'a', 'e', 'i', 'o', 'u'}, c)
|
||
|
}
|
||
|
|
||
|
makePrefixCount := func() []int {
|
||
|
prefixCount := make([]int, len(words))
|
||
|
|
||
|
count := 0
|
||
|
for i, word := range words {
|
||
|
if isVowel(word[0]) && isVowel(word[len(word)-1]) {
|
||
|
count++
|
||
|
}
|
||
|
prefixCount[i] = count
|
||
|
}
|
||
|
|
||
|
return prefixCount
|
||
|
}
|
||
|
prefixCount := makePrefixCount()
|
||
|
|
||
|
answer := make([]int, len(queries))
|
||
|
for i, query := range queries {
|
||
|
till := prefixCount[query[1]]
|
||
|
|
||
|
preceding := 0
|
||
|
if query[0] != 0 {
|
||
|
preceding = prefixCount[query[0]-1]
|
||
|
}
|
||
|
|
||
|
answer[i] = till - preceding
|
||
|
}
|
||
|
|
||
|
return answer
|
||
|
}
|