diff --git a/go/count-vowel-strings-in-ranges.go b/go/count-vowel-strings-in-ranges.go new file mode 100644 index 0000000..3409511 --- /dev/null +++ b/go/count-vowel-strings-in-ranges.go @@ -0,0 +1,38 @@ +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 +}