public NucleotideSum Process(char nucleotide) { NucleotideSum next = this; switch (nucleotide) { case 'A': next.A++; break; case 'C': next.C++; break; case 'G': next.G++; break; case 'T': next.T++; break; } return(next); }
public int[] Solution(string S, int[] P, int[] Q) { NucleotideSum[] prefix = new NucleotideSum[S.Length + 1]; prefix[1] = prefix[1].Process(S[0]); for (int i = 2; i < S.Length + 1; i++) { prefix[i] = prefix[i - 1].Process(S[i - 1]); } int[] result = new int[P.Length]; for (int i = 0; i < result.Length; i++) { int q = Q[i] + 1; int p = P[i]; result[i] = prefix[q].GetMinimalImpactFactor(prefix[p]); } return(result); }
public int GetMinimalImpactFactor(NucleotideSum previousSum) { if (A - previousSum.A != 0) { return(GetImpactFactor('A')); } if (C - previousSum.C != 0) { return(GetImpactFactor('C')); } if (G - previousSum.G != 0) { return(GetImpactFactor('G')); } if (T - previousSum.T != 0) { return(GetImpactFactor('T')); } return(0); }