int InversionNumber(char* s,int len)
- {
- int ans=0; //s逆序数
- int A,C,G; //各个字母出现次数,T是最大的,无需计算T出现次数
- A=C=G=0;
- for(int i=len-1;i>=0;i--)
- {
- switch(s[i])
- {
- case 'A':A++;break; //A是最小的,无逆序数
- case 'C':
- {
- C++;
- ans+=A; //当前C后面出现A的次数就是这个C的逆序数
- break;
- }
- case 'G':
- {
- G++;
- ans+=A;
- ans+=C;
- break;
- }
- case 'T':
- {
- ans+=A;
- ans+=C;
- ans+=G;
- break;
- }
- }
- }
- return ans;
- }