#include <cstdio>
#include <cstring>
using namespace std;
const int MaxN = 1e5;
char s[MaxN + 5];
int len;
long long od_a, od_b, od_ans, ev_a, ev_b, ev_ans;
int main()
{
	  scanf("%s", s);
	  len =  strlen(s);
	  for(int i = 0; i <= len - 1; i++)
	  {
		    if(i & 1)
		    {
			      if(s[i] == ‘a‘) 
			      {
				        od_a++;    
				        od_ans += od_a;   //如果i为奇数;则od_ans需增加od_a的个数;
				        ev_ans += ev_a;   //如果i为奇数;则ev_ans需增加ev_a的个数;
			      }
			      if(s[i] == ‘b‘) 
			      {
				        od_b++;
				        od_ans += od_b;   
				        ev_ans += ev_b;  
			      }
		    }
		    else
		    {
			      if(s[i] == ‘a‘)
			      {
				        ev_a++;
				        od_ans += ev_a;   //如果i为偶数;则od_ans需增加ev_a的个数;
				        ev_ans += od_a;   //如果i为偶数;则ev_ans需增加od_a的个数;
			      }
			      if(s[i] == ‘b‘)
			      {
				        ev_b++;
				        od_ans += ev_b;
				        ev_ans += od_b;
			      }
		    }
	  }
	  printf("%I64d %I64d\n", ev_ans, od_ans);
}
本题重点在于读过1次的字符不能再次搜索,在每一位都更新答案,并记录到本位与本位字符相同的奇数位字符次数,和偶数位次数。
原文:http://www.cnblogs.com/chenjiaqi-acm/p/4992684.html