C# Genomic Range Query
static int[] GenomicRangeQuery(string s, int[] p, int[] q)
{
var r = new int[p.Length];
for (int k = 0; k < p.Length; k++)
{
var pi = p[k];
var length = q[k] - pi + 1;
var subStr = s.Substring(pi, length);
if (subStr.Contains('A'))
{
r[k] = 1;
}
else if (subStr.Contains('C'))
{
r[k] = 2;
}
else if (subStr.Contains('G'))
{
r[k] = 3;
}
else
{
r[k] = 4;
}
}
return r;
}
This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.