一個只包含a,b字符串,可以將連續若干個相同的字符壓縮成一位,比如abaaabb -> abab,如果一個串壓縮之後是一個迴文串,那麼這個串就是一個good string,現在求給出的串的所有子串裏,長度爲偶數和奇數的good string各有多少個...注意到如果一個串的首尾是相同的,那麼這個串一定是一個good string,首先把頭尾重複的串壓縮成一位(假設是a),那麼所夾的一個是一個兩端爲b的子串,進一步壓縮,直到爲空,a,b是交替並且成對出現的,所以一定是迴文串,那麼只要枚舉原串的每一位,同時記錄一下它之前與他相同的字符在奇數位置,和偶數位置出現的次數,在根據當前位置的奇偶性,就可以累加出最後的答案了。
import java.math.BigInteger;
import java.util.*;
import java.math.*;
public class aaa {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
String s;
int a1,a2,b1,b2;
long ans1,ans2;
while(cin.hasNext())
{
s=cin.next();
//System.out.println(s);
ans1=ans2=0;
a1=a2=b1=b2=0;
ans1=s.length();
for (int i=0; i<s.length(); i++)
{
if (s.charAt(i)=='a')
{
if (i%2==0)
{
ans1+=a2;
ans2+=a1;
}
else
{
ans1+=a1;
ans2+=a2;
}
if (i%2==0) a2++;
else a1++;
}
else
{
if (i%2==0)
{
ans1+=b2;
ans2+=b1;
}
else
{
ans1+=b1;
ans2+=b2;
}
if (i%2==0) b2++;
else b1++;
}
}
System.out.printf("%d %d\n",ans2,ans1);
//System.out.printf("%I64d %I64d\n",ans2,ans1);
}
}
}