本题采用很奇葩的思想,每次采用由中心向外扩散的思想,只要过程中有一个不符合,则外面的一点不符合~
#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
#include<string>
#include<stack>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<ctime>
#include<iomanip>
#include<cstring>
#include <cstdio>
#include <map>
#include <list>
#include <set>
#include <queue>
#include <deque>
#include <climits>
using namespace std;
int main()
{
ifstream cin("atest.txt");
char s[5000];
int p,i,half,left,right,count;
while(cin>>s)
{
i=strlen(s);
count=0;
/ from left to right
for(p=0;p<i-1;p++)
{
half=((i-1)-p)/2;
if(((i-1)-p)%2==0) //子串为奇数
{
left=p+half-1;
right=p+half+1;
}
else
{
left=p+half;
right=p+half+1;
}
while(left>=p)
{
if(s[left]==s[right])
{
count++;
left--;
right++;
}
else break;
}
}
for(p=i-2;p>=1;p--)
{
half=p/2;
if(p%2==0) //奇数个
{
left=half-1;
right=half+1;
}
else
{
left=half;
right=half+1;
}
while(left>=0)
{
if(s[left]==s[right])
{
count++;
left--;
right++;
}
else break;
}
}
cout<<count+i<<endl;
}
}