Go Genomic Range Query
func genomicRangeQuery(s string, p, q []int) []int {
result := make([]int, len(p))
for k, pi := range p {
sub := s[pi : q[k]+1]
switch {
case strings.Contains(sub, "A"):
result[k] = 1
case strings.Contains(sub, "C"):
result[k] = 2
case strings.Contains(sub, "G"):
result[k] = 3
default:
result[k] = 4
}
}
return result
}
This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.