动态规划
从前往后记录a和b出现的次数和位置
两边字母相同的子串一定是符合条件的子串
#include<bits/stdc++.h>
using namespace std;
int main()
{
int sumeven[2],sumodd[2];
char s[100020];
scanf("%s",s);
long long even=0,odd=0;
int len=strlen(s);
sumeven[0]=sumeven[1]=sumodd[0]=sumodd[1]=0;
for (int i=0;i<len;i++)
{
odd++;
int x=s[i]-'a';
if (i%2==0)
{
odd+=sumeven[x];
even+=sumodd[x];
sumeven[x]++;
}
else
{
odd+=sumodd[x];
even+=sumeven[x];
sumodd[x]++;
}
}
cout<<even<<" "<<odd<<endl;
return 0;
}