示例#1
0
                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);
                }
示例#2
0
            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);
            }
示例#3
0
                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);
                }